算数运算符
+
x + y
-
*
/
%
余数
自增、直减
x++ 等价与 x = x + 1
x–
赋值运算符
=
x += y
等价与 x = x + y
-=
*=
/=
%=
比较运算符
>
<
>=
<=
相等 全等 不等 不全等
==
===
!=
!==
逻辑运算符
!
非运算,可将变量转换成boolean类型,null、undefined和空字符串取反都为true,其余都为false。
||
短路或运算,第一个表达式成立,后面的表达式不运算,直接返回
&&
短路与运算,第一个表达式不成立,后面的表达式不运算,直接返回
|
非短路运算符,判断所有表达式
&
非短路运算符,判断所有表达式
!!
if(!!a){
// a != null && typeof(a) != undefined && a != ''
// a有内容才执行的代码...
}
?.
可选链
let b = a?.name;
我们终于看到?.这个东西了,其实这个就叫做可选链,表达的意思,就和刚才if else的例子是一个意思,只有当a存在,同时a具有name属性的时候,才会把值赋给b,否则就会将undefined赋值给b。重要的是,不管a存在与否,这么做都不会报错。
还可以这样写:
let b = a?.name?.age;
??
空值合并运算符
let b = a ?? c;
上面的例子,当a除了undefined、或者null之外的任何值,b都会等于a,否则就等于c。
~~
~~常用来向下取整
数字类型向下取整
任何boolen类型的,如果为TRUE则输出1,FALSE输出0;
其他除数字外的东西,一律输出 Number类型的0
? :
三元运算符
位运算符
|
按位或
两个相应的二进制位中只要有一个为1,该位的结果值为1
&
按位与
如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
位与运算的特殊用途:
一、清零(将一个单元与0进行位与运算结果为零)
二、取一个数指定位(例如取num=1010 1101的低四位 则将num&0xF得到0000 1101)。
三、判断奇偶性:用if ((a & 1) == 0) 代替 if (a % 2 == 0)来判断a是不是偶数。
^
按位异或
若参加运算的两个二进制位值相同则为0,否则为1
~
取反
~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1
~44 = -45
~-44 = 43
常用场景:
求相反数: ~a + 1
<<
左移
用来将一个数的各二进制位全部左移N位,右补0
常用场景:
左移常被用来做 * (2 ^ n)的运算,因为直接基于二进制运算,所以左移效率比 * (2 ^ n)高。
>>
右移
将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数, 高位补0
常用场景:
右移常被用来做 / (2 ^ n)的运算,因为直接基于二进制运算,所以右移效率比 / (2 ^ n)高。
>>>
无符号右移
运算符规则是:各二进位全部右移若干位,高位补0,低位丢弃。
ES7 指数操作符 **
**
**具有与 Math.pow(..)等效的计算结果
2 ** 10 等于 1024 等于 1 << 10
ES12 逻辑赋值操作符
??=
a ??= b 等同于 a = a ?? b
&&=
||=