赋值表达式 右边部分
-
右值表达式 ( RightHandSideExpression )
在JS中 规定在等号右边表达式叫做条件表达式
运算符的优先级 语法角度-> 表达式结构乘法表达式和加号运算符构成加法表达式
-
更新表达式 UpdateExpression
– a;
++ a;
a –
a ++ -
一元运算表达式 unaryExpression
只需要一个表达式的运算符 叫做一元运算符
5+6 ( +号需要两个操作数 )
5++ ( ++ 只需要一个操作数 )更新表达式搭配一元运算符,可以形成一元运算表达式
delete a.b;
void a;
typeof a;- a;
~ a;
! a;
await a;
- a;
-
乘方表达式 ExponentiationExpression
++i ** 30
2 ** 30 //正确
-2 ** 30 //报错 -
乘法表达式 MultiplicativeExpression
x * 2; 乘法表达式有三种运算符 : * / %
-
加法表达式 AdditiveExpression
加法表达式是由乘法表达式用加号或者减号连接构成的a + b * c 加法表达式有两种运算符: + -
-
移位表达式 ShiftExpression
移位运算把操作数看做二进制表示的整数,然后移动特定位数
所以左移 n 位相当于乘以 2 的 n 次方,右移 n 位相当于除以 2 取整 n 次。移位表达式由加法表达式构成
移位是一种位运算 分三种:<< 向左移位 >> 向右移位 >>> 无符号向右移位
-
关系表达式 RelationalExpression
<= 和 >= 关系运算,完全是针对数字的,所以 <= 并不等价于 < 或 ==
<=
=
<instanceof
innull <= undefined
//false
null == undefined
//true -
相等表达式 EqualityExpression
!=
!==
类型不同的变量比较时==运算只有三条规则:
undefined 与 null 相等;
字符串和 bool 都转为数字再比较;
对象转换成 primitive 类型再比较。几个不太寻常的类型转换案例: false == '0' // true true == 'true' // false [] == 0 // true [] == false // true new Boolean('false') == false // false 一个是即使字符串与 boolean 比较,也都要转换成数字; 另一个是对象如果转换成了 primitive 类型跟等号另一边类型恰好相同,则不需要转换成数字 == 尽量用在 判断 Number 和 String类型之间使用
-
位运算表达式
按位 与(&) 表达式 BitwiseANDExpression
按位 异或(^) 表达式 BitwiseANDExpression
异或运算有一个特征就是 两次异或运算相当于取消 可以拿这个技巧来做值的交换 let a = 102, b = 324; a = a ^ b; b = a ^ b; a = a ^ b; console.log(a, b);
按位 或(|) 表达式 BitwiseORExpression。
-
逻辑 与 表达式 逻辑 或 表达式
false || 1;
false && undefined;
-
条件表达式 ConditionalExpression 三目表达式
condition ? branch1 : branch2
-
JS中所有的运算符优先级和结合性
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence