js运算符

运算符

算术运算符

+ - * / ** % + - ++ --

加法运算符

加法运算符存在重载,当左右两边有字符串的时候会变成连接运算符
除了加法运算符其他都会变成数字进行加减乘除

如果运算子是对象,必须先转成原始类型的值,规则之前都总结过先 valueOf 后 toString
当然也有一个例外就是如果是 Date 类型的时候要优先 toString

余数运算符

负数取余可以用绝对值
浮点数不是精确的值,所以无法取到精确的结果

自增和自减运算符

需要注意的是如果是放在变量之后,要先返回变量操作的值,再进行运算(?)

数值运算符和负数值运算符

也是用 + 但是他是一元运算符(与 Number 函数的作用相同)

指数运算符

2**3**22**(3**2) 是一样的

赋值运算符

以 = 为基础的一系列运算符

比较运算符

> < >= <= == != === !==

非相等运算符比较字符串

比较 unicode 码点

非相等运算符比较非字符串

原始类型的值转为 Number 比较,注意 NaN
对象的话要转为原始类型,再开始比较,先调用 valueOf 再调用 toString

严格相等运算符

必须是同一个值才返回 true
undefined 和 null 与任何值比较都是返回 false
但是 undefined === undefined null === null undefined == null

严格不相等运算符

就是执行严格相等运算符之后取反

相等运算符

数字比较的时候是一样的,其余情况都会发生隐式转换
隐式转换的规则就比较多了,列举几个

  • 如果是原始类型就转换成数值进行比较
  • 如果是和对象进行比较就转换成原始值进行比较,和字符串比就转换成字符串,其余一般转换成数值
    undefined null 和其他类型进行比较时,返回 false

不相等运算符

相等取反

布尔运算符

1
! && || ?:

取反运算符 !

除了六个 falsy 值 返回 true 其他都返回 false

且运算符 &&

a && b && c 返回第一个布尔值为 false 的值,如果其他都是 true 就返回最后一个值
aa && fn()

或运算符 ||

a || b || c 返回第一个值为 true 的值,如果其他都是 false 返回最后一个值

三元运算符 ?:

如果第一个表达式是 true 就返回第二个表达式,否则就返回第三个表达式的值
和 if else 唯一的区别就是,if else 是语句没有返回值,三元表达式是有返回值的,需要返回值的时候就要用三元表达式

其他运算符

void 运算符

void(0) 执行一个表达式,不返回任何值

逗号运算符

执行第一个表达式,返回第二个值