JS运算符优先级和结合性一览表

admin   ·   发表于 1个月前   ·   javascript

JS 运算符的优先级和结合性规定了它们在复杂的表达式中的运算顺序。

JS 运算符优先级

运算符的执行顺序称为运算符的优先级,优先级高的运算符先于优先级低的运算符执行运算。例如:

w=x+y*z;

执行加法运算的+运算符的优先级低于*运算符,所以y*z将先被执行,乘法运算执行完后得到的结果再和 x 相加。

运算符的优先级可以通过使用圆括号来改变,例如为了让加法先执行,乘法后执行,可以修改上面的表达式为:

w=(x+y)*z;

这样就会先执行x+y,得到和后再和 z 进行乘法运算。

JS 运算符结合性

对于相同优先级的运算符的执行顺序,则由运算符的结合性来决定。运算符的结合性包括「从右至左」和「从左至右」两种:

  • 从右至左的结合性指的是,运算的执行是按从右到左的顺序进行;
  • 从左至右的结合性刚好相反,运算符的执行顺序按照从左到右的顺序进行。

JS 运算符优先级和结合性一览表

下表中按照优先级由高到低的顺序罗列了 JavaScript 中的所有运算符:

优先级运算符类型结合性运算符高低
21圆括号n/a(不相关)( … )
 ↑
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
20成员访问从左到右… . …
需计算的成员访问从左到右… [ … ]
new(带参数列表)n/anew … ( … )
函数调用从左到右… ( … )
可选链(Optional chaining)从左到右?.
19new(无参数列表)从右到左new …
18后置递增n/a… ++
后置递减… --
17逻辑非 (!)从右到左! …
按位非 (~)~ …
一元加法 (+)+ …
一元减法 (-)- …
前置递增++ …
前置递减-- …
typeoftypeof …
voidvoid …
deletedelete …
awaitawait …
16幂 (**)从右到左… ** …
15乘法 (*)从左到右… * …
除法 (/)… / …
取余 (%)… % …
14加法 (+)从左到右… + …
减法 (-)… - …
13按位左移 (<<)从左到右… << …
按位右移 (>>)… >> …
无符号右移 (>>>)… >>> …
12小于 (<)从左到右… < …
小于等于 (<=)… <= …
大于 (>)… > …
大于等于 (>=)… >= …
in… in …
instanceof… instanceof …
11相等 (==)从左到右… == …
不相等 (!=)… != …
全等 (===)… === …
不全等 (!==)… !== …
10按位与 (&)从左到右… & …
9按位异或 (^)从左到右… ^ …
8按位或 (|)从左到右… | …
7逻辑与 (&&)从左到右… && …
6逻辑或 (||)从左到右… || …
5空值合并 (??)从左到右… ?? …
4条件(三元)运算符从右到左… ? … : …
3赋值从右到左… = …
… += …
… -= …
… **= …
… *= …
… /= …
… %= …
… <<= …
… >>= …
… >>>= …
… &= …
… ^= …
… |= …
… &&= …
… ||= …
… ??= …
2yield从右到左yield …
yield*yield* …
1逗号 / 序列从左到右… , …

说明:不同行的运算符, 从上往下,优先级由高到低依次排列。

【示例】JS 运算符的优先级和结合性示例。

  1. //根据默认的优先级和结合性先进行乘法运算,再取模,最后才进行加法运算
  2. var expr1 = 3 + 5 * 5 % 3;
  3. //使用()修改优先级,首先进行加法运算,然后按从左至右的结合性依次进行乘法和取模运算
  4. var expr2 = (3 + 5) * 5 % 3;
  5. //使用()修改优先级,使得加法和取模运算优先级相同且最高,首先进行加法和取模运算,最后再进行乘法运算
  6. var expr3 = (3 + 5) * (5 % 3);
  7. console.log("expr1 = " + expr1);
  8. console.log("expr2 = " + expr2);
  9. console.log("expr3 = " + expr3);

在 Chrome 开发者工具中运行代码,结果为:

expr1 = 4
expr2 = 1
expr3 = 16

0 Reply   |  Until 1个月前 | 16 View
LoginCan Publish Content