本文采编自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制作,导出为图片。
- 取幂运算符
**
为ES7语法。浏览器兼容性、exponentiation (**) operator - 取幂赋值
**=
同上。 - 计算成员访问,指的是使用
[...]
的方式访问对象的成员属性。 - 三目运算符为条件判断语句。
markdown解析表格时出现错误,竖线符识别问题,下次修复。
2016年10月28日,修复markdown表格中单元格带竖线
|
的问题。