文章目录
- 如果 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 |
逗号 / 序列 |
从左到右 |
, |