JS运算符优先级

本文采编自MDN

运算符的优先级决定了表达式中运算执行的先后顺序,优先级高的运算符最先被执行。

下面是一个简单的例子:

3 + 4 * 5 // 计算结果为23

乘法运算符 (“*”)比起加法运算符(“+”)有着更高的优先级,所以它会被最先执行。

结合性

结合性决定了拥有相同优先级的运算符的执行顺序。考虑下面这个表达式:

a OP b OP c

左结合(从左到右计算)相当于把左边的子表达式加上小括号(a OP b) OP c,类似的,右关联(从右到左计算)相当于a OP (b OP c)。赋值运算符是右关联的,所以你可以这么写:

a = b = 5;

结果 a 和 b 的值都会成为5。这是因为赋值运算符的返回结果就是赋值运算符右边的那个值,具体过程是:b被赋值为5,然后a也被赋值为 b=5 的返回值,也就是5。

汇总表

下面的表将所有运算符按照优先级的不同从高到低排列。

运算符优先级表

优先级 运算类型 关联性 运算符
20 分组 n/a ( … )
19 成员访问 从左至右 … . …
19 计算成员访问 从左至右 … [ … ]
19 new (带参数) n/a new … ( … )
18 函数调用 从左至右 … ( <var>… </var>)
18 new (无参数) 从右至左 new …
17 后置自增 n/a … ++
17 后置自减 n/a … --
16 逻辑非 从右至左 ! …
16 按位取非 从右至左 ~ …
16 一元加法 从右至左 + …
16 一元减法 从右至左 - …
16 前置自增 从右至左 ++ …
16 前置自减 从右至左 -- …
16 typeof 从右至左 typeof …
16 void 从右至左 void …
16 delete 从右至左 delete …
15 取幂 从右至左 … ** …
14 乘法 从左至右 … * …
14 除法 从左至右 … / …
14 取余 从左至右 … % …
13 加法 从左至右 … + …
13 减法 从左至右 … - …
12 按位左移 从左至右 … << …
12 按位右移 从左至右 … >> …
12 无符号右移 从左至右 … >>> …
11 小于 从左至右 … < …
11 小于等于 从左至右 … <= …
11 大于 从左至右 … > …
11 大于等于 从左至右 … >= …
11 in 从左至右 … in …
11 instanceof 从左至右 … instanceof …
10 等号 从左至右 … == …
10 不等号 从左至右 … != …
10 全等 从左至右 … === …
10 非全等 从左至右 … !== …
9 按位与 从左至右 … & …
8 按位异或 从左至右 … ^ …
7 按位与 从左至右 … | …
6 逻辑与 从左至右 … && …
5 逻辑或 从左至右 … || …
4 条件判断 从右至左 … ? … : …
3 赋值运算 从右至左 … = …
… += …
… -= …
… **= …
… *= …
… /= …
… %= …
… <<= …
… >>= …
… >>>= …
… &= …
… ^= …
… |= …
2 yield 从右至左 yield …
2 yield* 从右至左 yield* …
1 Spread n/a ...
0 逗号运算符 从左至右 … , …

表格由word制作,导出为图片。


markdown解析表格时出现错误,竖线符识别问题,下次修复。

2016年10月28日,修复markdown表格中单元格带竖线|的问题。

详情见:https://github.com/xovel/xovel.github.io/issues/10