运算符优先级
运算符优先级
如果一个表达式拥有超过一个运算符,执行的顺序则由 优先级 决定。换句话说,所有的运算符中都隐含着优先级顺序。
从小学开始,我们就知道在表达式 1 + 2 * 2 中,乘法先于加法计算。这就是一个优先级问题。乘法比加法拥有 更高的优先级。
圆括号拥有最高优先级,所以如果我们对现有的运算顺序不满意,我们可以使用圆括号来修改运算顺序,就像这样:(1 + 2) * 2。
在 JavaScript 中有众多运算符。每个运算符都有对应的优先级数字。数字越大,越先执行。如果优先级相同,则按照由左至右的顺序执行。
这是一个摘抄自 Mozilla 的 优先级表(你没有必要把这全记住,但要记住一元运算符优先级高于二元运算符):
| 优先级 | 名称 | 符号 |
|---|---|---|
| … | … | … |
| 15 | 一元加号 | + |
| 15 | 一元负号 | - |
| 14 | 求幂 | ** |
| 13 | 乘号 | * |
| 13 | 除号 | / |
| 12 | 加号 | + |
| 12 | 减号 | - |
| … | … | … |
| 2 | 赋值符 | = |
| … | … | … |
我们可以看到,“一元加号运算符”的优先级是 15,高于“二元加号运算符”的优先级 12。这也是为什么表达式 "+apples + +oranges" 中的一元加号先生效,然后才是二元加法。
赋值运算符
我们知道赋值符号 = 也是一个运算符。从优先级表中可以看到它的优先级非常低,只有 2。
这也是为什么,当我们赋值时,比如 x = 2 * 2 + 1,所有的计算先执行,然后 = 才执行,将计算结果存储到 x。
运算符 += 和 *= /= 和 -= 等这类运算符的优先级与普通赋值运算符的优先级相同,所以它们在大多数其他运算之后执行:
自增/自减和其它运算符的对比
++/-- 运算符同样可以在表达式内部使用。它们的优先级比绝大部分的算数运算符要高。
请注意逗号运算符的优先级非常低,比 = 还要低
与运算 && 的优先级比或运算 || 要高。
非运算符 ! 的优先级在所有逻辑运算符里面最高,所以它总是在 && 和 || 之前执行。
?? 运算符的优先级非常低,仅略高于 ? 和 =,因此在表达式中使用它时请考虑添加括号。

浙公网安备 33010602011771号