JavaScript语法:新加入的**运算符,哪里有些不一样呢?
更新表达式 UpdateExpression
左值表达式搭配 ++ -- 运算符,可以形成更新表达式。
-- a;
++ a;
a --
a ++
一元运算表达式 UnaryExpression
delete a.b;
void a;
typeof a;
- a;
~ a;
! a;
await a;
更新表达式搭配了一个一元表达式
乘方表达式 ExponentiationExpression
乘方表达式也是由更新表达式构成的。它使用**号。
++i ** 30
2 ** 30 //正确
-2 ** 30 //报错 -(2 ** 30)
-2这样的一元运算表达式,是不可以放入乘方表达式的,如果需要表达类似的逻辑,必须加括号。
4 ** 3 ** 2 // 实际运算是 4 ** (3 ** 2) 结果是 262144
乘法表达式 MultiplicativeExpression
乘方表达式可以构成乘法表达式,用乘号或者除号、取余符号连接就可以了
*
/
%
加法表达式 AdditiveExpression
加法表达式是由乘法表达式用加号或者减号连接构成的。
+
-
移位表达式 ShiftExpression
移位表达式由加法表达式构成,移位是一种位运算,分成三种:
<< 向左移位
>> 向右移位
>>> 无符号向右移位
移位运算把操作数看作二进制的整数,然后移动特定位数,所以左移n位相当于乘于2的n次方,右移相当于除以2取整n次。
普通移位会保持正负数,无符号移位会把减号视为符号为1,同时参与移位:
-1 >>> 1 // 2147483647 也就是2的31次方
在JavaScript中,二机制操作整数并不能提高性能。移位在这里仅仅作为一种数学运算存在。
关系表达式 RelationalExpression
关系表达式就是大于、小于、大于等于、小于等于等运算符号连接,统称为关系运算。
<=,>=完全是针对数字的
<=
>=
<
>
instanceof
in
相等表达式 EqualityExpression
在语法上,相等表达式是由关系表达式用相等比较运算符(如 ==)连接构成的。
相等表达式由四种运算符和关系表达式构成:
==
!=
===
!==
对于不同的变量比较时,==运算只有三条规则:
- undefined与null相等
- 字符串和boolean都转换为数字再比较
- 对象都转换为primitive类型再比较
位运算表达式
位运算表达式含有三种:
- 按位与表达式 BitwiseANDExpression
- 按位异或表达式 BitwiseANDExpression
- 按位或表达式 BitwiseORExpression。
按位与表达式由按位与运算符(&)连接按位异或表达式构成,按位与表达式把操作数视为二进制整数,然后把两个操作数按位做与运算。
按位异或表达式由按位异或运算符(^)连接按位与表达式构成,按位异或表达式把操作数视为二进制整数,然后把两个操作数按位做异或运算。异或两位相同时得0,两位不同时得1。
异或运算有个特征,那就是两次异或运算相当于取消。所以有一个异或运算的小技巧,就是用异或运算来交换两个整数的值。
let a = 102, b = 324;
a = a ^ b;
b = a ^ b;
a = a ^ b;
console.log(a, b);
逻辑与表达式和逻辑或表达式
逻辑与表达式由按位或表达式经过逻辑与运算符连接构成,逻辑或表达式则由逻辑与表达式经逻辑或运算符连接构成。
||
&&
逻辑表达式具有短路的特性
true || foo();
// foo不会被执行
条件表达式 ConditionalExpression
条件表达式由逻辑或表达式和条件运算符构成,条件运算符又称三目运算符,它有三个部分,由两个运算符?和:配合使用。
condition ? branch1 : branch2
需要注意的是,条件表达式也和逻辑表达式一样,可能忽略后面表达式的计算。这点与C语言的条件表达式是不一样的。
此文章为7月Day15学习笔记,内容来源于极客时间《重学前端》,日拱一卒,每天进步一点点💪💪
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。