文章目录
- 如果 OP1 和 OP2 具有不同的优先级(见下表),则优先级最高的运算符先执行,不用考虑结合性。
console.log(3 + 10 * 2);
console.log((3 + 10) * 2);
- 如果 OP1 和 OP2 具有相同的优先级,则需考虑结合性。
- 左结合(左到右)相当于把左边的子表达式加上小括号 (a OP b) OP c
- 右结合(右到左)相当于 a OP (b OP c)
a = b = 5;
- 下面的表格将所有运算符按照优先级的不同从高(19)到低(1)排列。
优先级 | 运算符类型 | 结合性 | 运算符 |
---|
19 | 分组 | n/a(不相关) | () |
同上 | 成员访问 | 从左到右 | . |
同上 | 需计算的成员访问 | 同上 | ... |
同上 | 函数调用 | 同上 | fun() |
同上 | 可选链(Optional chaining) | 同上 | ?. |
同上 | new(带参数列表) | n/a | new |
17 | new(无参数列表) | 从右到左 | new |
16 | 后置递增 | n/a | ++ |
同上 | 后置递减 | 同上 | -- |
15 | 逻辑非 (!) | 从右到左 | ! |
同上 | 按位非 (~) | 同上 | ~ |
同上 | 一元加法 (+) | 同上 | + |
同上 | 一元减法 (-) | 同上 | - |
同上 | 前置递增 | 同上 | ++ |
同上 | 前置递减 | 同上 | -- |
同上 | typeof | 同上 | typeof |
同上 | void | 同上 | void |
同上 | delete | 同上 | delete |
同上 | await | 同上 | await |
14 | 幂 (**) | 从右到左 | ** |
13 | 乘法 (*) | 从左到右 | * |
同上 | 除法 (/) | 同上 | / |
同上 | 取余 (%) | 同上 | % |
12 | 加法 (+) | 从左到右 | + |
同上 | 减法 (-) | 同上 | - |
11 | 按位左移 (<<) | 从左到右 | << |
同上 | 按位右移 (>>) | 同上 | >> |
同上 | 无符号右移 (>>>) | 同上 | >>> |
10 | 小于 (<) | 从左到右 | < |
同上 | 小于等于 (<=) | 同上 | <= |
同上 | 大于 (>) | 同上 | > |
同上 | 大于等于 (>=) | 同上 | >= |
同上 | in | 同上 | in |
同上 | instanceof … | 同上 | instanceof |
9 | 相等 (==) | 从左到右 | == |
同上 | 不相等 (!=) | 同上 | != |
同上 | 一致/严格相等 (===) | 同上 | === |
同上 | 不一致/严格不相等 (!==) | 同上 | !== |
8 | 按位与 (&) | 从左到右 | & |
7 | 按位异或 (^) | 从左到右 | ^ |
6 | 按位或 (|) | 从左到右 | | |
5 | 逻辑与 (&&) | 从左到右 | && |
4 | 逻辑或 (||) | 从左到右 | || |
同上 | 空值合并 (??) | 从左到右 | ?? |
3 | 条件(三元)运算符 | 从右到左 | ? … : |
2 | 赋值 | 从右到左 | = |
同上 | 同上 | 同上 | += |
同上 | 同上 | 同上 | -= |
同上 | 同上 | 同上 | **= |
同上 | 同上 | 同上 | *= |
同上 | 同上 | 同上 | /= |
同上 | 同上 | 同上 | %= |
同上 | 同上 | 同上 | <<= |
同上 | 同上 | 同上 | >>= |
同上 | 同上 | 同上 | >>>= |
同上 | 同上 | 同上 | &= |
同上 | 同上 | 同上 | ^= |
同上 | 同上 | 同上 | |= |
同上 | 同上 | 同上 | &&= |
同上 | 同上 | 同上 | ||=. |
同上 | 同上 | 同上 | ??= |
1 | 逗号 / 序列 | 从左到右 | , |