首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

Js运算符(操作符)

编程知识
2024年09月30日 12:29

算数运算符

a = 1 + 1 // 2
a = 10 - 5 // 5
a = 10 / 5  // 2
a = 10 / 0 // js中除以0不会报错,结果是Infinity
a = 2*2 // 4
a = 2**2 // 
a = 10 % 4 // 取余,2

js中算数运算,除了字符串的加法,会自动将非数值转换为int进行计算,不像其他语言会报错


a = 10 + true // 11

a = 10 - "3" // 7

a = 5 + null // 5

a = 5 - undefined // NaN

字符串的加法,会将非字符串的值转换为字符串,进行字符串拼接

a = "1" + a // "1a"

a = "1" + 1 // "11"

a = "1" + null // 1null

利用算数运算隐式类型转换的特性,也可以用于类型转换,比如 true +'',使用值与空字符串相加,结果会将true转换成字符串的true

赋值运算符

=用来将一个值赋值给一个变量

let a 

a = 10 // 将右边的值,赋值给左边变量

let b = a // 将a赋值给b,一个变量只有在左边的时候才是变量,在右边的时候就是值

赋值运算

// 大部分运算符不会改变变量的值,赋值运算符除外

a = 10
a + 1 // a+1的结果是11,但是a还是10,结果没有赋值

a += 1 // a的结果是11,等价于 a = a + 1, /= 、*= 等等原理一样

??=空赋值

只有当变量的值是null或undefined的时候,才会进行赋值操作

     let a
        a ??= 1 // a没有值,将1赋值给a
        console.log(a) // 1


        let b = 10
        b ??= 2 // b已经有值了,所以不会将2赋值给b
        console.log(b) // 2

一元正负

let a = 10
// 正号:不会改变数值的符号	
a = +a // 10

// 负号:可以对数值进行符号位取反
let b = 10
b = -b // -10
a = -a // -10

// 当对非数值类型进行正负运算时,会先将其转化为数值然后再运算
let c = "10"
c = +c // int 10,等价于b=Number(c),也可以使用一元的+转换类型
c = -c // int -10

自增和自减

自增

自增分为前自增(变量++)和后自增(++变量)

// 前自增
let a = 10
console.log(a++) // 10
console.log(a) // 11


// 后自增
let b = 20
console.log(++b) // 21
console.log(b) // 21

// 前后自增都会使原变量的值增加1,区别在于返回值不同
// 前自增表达式的返回值是自增前的值,后自增的返回值是自增后的值
自减

自减也分为前自减和后自减,原理与自增一致

let c = 10
console.log(c--) // 10
console.log(c) // 9

let d = 10
console.log(--d) // 9
console.log(d) // 9

逻辑运算符

逻辑非!

! 可以对一个值进行非运算,可以对一个布尔值进行取反操作,如果对一个非布尔值进行取反,会先将其转化为布尔值再进行取反,可以利用该特定将其他类型转换为布尔值

let result
result = !0 // true
逻辑与&&

与运算如果所有的表达式都是为true,则返回true,否则返回false

与运算是短路的,如果有值为false,则直接返回false,不会向后执行

let result 

result = true && true // true

result = true && false // false

result = true && alert(1) // alert会执行

result = false && alert(1) // alert不会值

对于非布尔值的运算,会将其转化为布尔值进行运算,但是最终返回不是布尔,会返回原值

如果有值为false,则直接false的值,如果值都为true,则返回最后一个值

let result
result = 1 && 2 && 3 // 3

result = 1 && 0 && 2 // 0
逻辑或||

当 ||运算的时候左右有true的值,则返回true,否则false

或运算也是短路的,如果找到true则直接返回,不会向后运算

对于非布尔值的运算,会转换为布尔值然后运算,但是最终也会返回原值,如果第一个是false返回第二个值

let result
result = true || false // true
result = false || false // false


result = 1 || 2 // 1
result = 0 || 2 // 2

result = 1 || alert(1) // 不会会执行alert
result = 0 || alert(1) // 会执行alert

关系运算符

检查两个值之间的关系是否成立,成立返回true,不成立返回false

let result 

result = 5 > 5 // false
result = 5 >=5 // true
result = 5 <= 5 // true


// 当对非数值进行关系运算时,会先转为为数值再比较
result = "1" > false // true
result = 5 < "10" // true

// 当关系运算符两端是两个字符串,不会将字符串转换数值,而是逐位比较自费的Unicode编码
result = "a" < "b" // true
result = "12" > "2" // false ,即使两个字符串都是数值,也不会转换数值运算
result = +"12" > "2" // true 可以使用一元运算将一个值转换为数值,则会进行数值运算

相等运算符

==相等运算符,用来比较两个值是否相等,相等返回true,否则false

  • 如果两个值是不同类型时,相等运算符会将他们转换为同类型(通常是数值)再比较
  • null和undefined进行相等比较时返回true
  • NaN不和任何值相等,包括他自身

===全等运算符都是用来比较两个值是否相等

​ 如果两个值是不同类型,不会进行类型转换,如果两个值类型不同,则直接返回false

let result 
// 相等运算
result = 1 == 2 // false

result = "1" == 1 // true

result = null == undefined // true

// 全等运算
result = "1" === 1 // false 
result = 2 === 2 // true
result = null === undefined // false,undefined和null相等,但是不全等

!=:比较两个值是否不相等,会自动进行类型转换

!==:比较两个值是否不全等,不会自动进行类型转换

result = 1 != 1 // false

result = 1 != "1" // false

result = 1 !== "1" // true

条件运算符(三元运算符)

条件表达式?表达式1:表达式2

执行顺序:

  • 先对表达式进行一个求值判断,如果结果为true,则执行表达式1,如果结果为false,则执行表达式2
let a = 10
let b = 20

a > b ? alert("a") : alert("b")
let max = a > b ? a : b // 如果a大于b,则max=a,否则等于b

运算符优先级

运算符中()拥有最高优先级,如果需要优先运算,可以使用()把表达式包裹起来

From:https://www.cnblogs.com/Mickey-7/p/18441656
本文地址: http://shuzixingkong.net/article/2416
0评论
提交 加载更多评论
其他文章 理解 Vue 的 setup 应用程序钩子
title: 理解 Vue 的 setup 应用程序钩子 date: 2024/9/30 updated: 2024/9/30 author: cmdragon excerpt: 摘要:本文详细介绍了Vue 3中setup函数的应用,包括其概念、特性、使用方法及重要性。setup函数作为组合API的
理解 Vue 的 setup 应用程序钩子 理解 Vue 的 setup 应用程序钩子
记一次Razor Pages无法编译问题及解决
解决方案写在前面:更新Visual Studio及相关组件,本人版本自17.8.0更新至17.11.4 缘起于公司的一个业务接口,在有一些信息需要在应用内嵌的webview中展示,信息不少,涉及的前端技术不复杂,但是拼字符串太罗嗦,所以想到了添加一个Razor页面,所以,常规逻辑,在服务上注册&#3
记一次Razor Pages无法编译问题及解决 记一次Razor Pages无法编译问题及解决 记一次Razor Pages无法编译问题及解决
PasteForm最佳CRUD实践,实际案例PasteTemplate详解之3000问(三)
作为“贴代码”力推的一个CRUD实践项目PasteTemplate,在对现有的3个项目进行实战后效果非常舒服!下面就针对PasteForm为啥我愿称为最佳CRUD做一些回答: 哪里可以下载这个PasteForm的项目案例 目前“贴代码”对外使用PasteForm的项目有&quot;贴Builder(
PasteForm最佳CRUD实践,实际案例PasteTemplate详解之3000问(三) PasteForm最佳CRUD实践,实际案例PasteTemplate详解之3000问(三) PasteForm最佳CRUD实践,实际案例PasteTemplate详解之3000问(三)
.NET 开源 EF Core 批处理扩展工具,真好用
前言 Entity Framework Core(EF Core)作为 .NET 生态系统中受欢迎的对象关系映射器(ORM),其轻量级、可扩展性和支持多个数据库引擎而备受青睐。 本文将介绍一款.NET 的开源 EF Core 批处理扩展工具,它极大地提升了数据处理的效率和性能。来看看如何轻松集成到我
.NET 开源 EF Core 批处理扩展工具,真好用 .NET 开源 EF Core 批处理扩展工具,真好用 .NET 开源 EF Core 批处理扩展工具,真好用
linux内核调试痛点之函数参数抓捕记
1.linux内核调试工具crash并不能直接显示函数参数,而这个对调试又非常重要 下面是工作中一个实际的问题,我们的进程hang在如下一个内核栈中了,通过栈回溯可知是打开了一个nfs3的网盘文件或者目录,已知客户机器的NAS盘不可访问了,只要访问就会hang住,但我们的进程理论上是不会访问该NAS
linux内核调试痛点之函数参数抓捕记 linux内核调试痛点之函数参数抓捕记 linux内核调试痛点之函数参数抓捕记
五,MyBatis-Plus 当中的 “ActiveRecord模式”和“SimpleQuery工具类”(详细实操)
五,MyBatis-Plus 当中的 “ActiveRecord模式”和“SimpleQuery工具类”(详细实操) @目录五,MyBatis-Plus 当中的 “ActiveRecord模式”和“SimpleQuery工具类”(详细实操)1. ActiveRecord 模式2. ActiveRec
五,MyBatis-Plus 当中的 “ActiveRecord模式”和“SimpleQuery工具类”(详细实操) 五,MyBatis-Plus 当中的 “ActiveRecord模式”和“SimpleQuery工具类”(详细实操) 五,MyBatis-Plus 当中的 “ActiveRecord模式”和“SimpleQuery工具类”(详细实操)
只写后台管理的前端要怎么提升自己
本人写了五年的后台管理。每次面试前就会头疼,因为写的页面除了表单就是表格。抱怨过苦恼过也后悔过,但是站在现在的时间点回想以前,发现有很多事情可以做的更好,于是有了这篇文章。 本文首发在 https://juejin.cn/post/7360528073631318027 写优雅的代码 一道面试题 大
.Net 依赖注入深入探索,做一个DI拓展,实现一个简易灵活的 自动依赖注入框架
一、依赖注入相关知识 1.1、依赖注入的原理和优点 依赖注入(DI),是IOC控制反转思想 的实现。由一个DI容器,去统一管理所有的服务生命周期,服务的创建、销毁、获取,都是由DI容器去处理的。 依赖注入,很大程度解耦了服务之间的依赖关系,服务之间依赖的是抽象(依赖的是 服务/服务接口 的 “类型”