运算符优先级确定彼此之间解析运算符的方式。
具有较高优先级的运算符将成为具有较低优先级的运算符的操作数。
在下面的示例中,乘法的优先级高于加法,这决定了运算的结果。
// 首先将3乘以5,然后加10 var x = 10 + 3 * 5;测试看看‹/›
相反,如果我们想首先运行加法运算,则应将其分组在括号中,该括号始终具有最高优先级。
// 首先将10和3相加,然后乘以5 var x = (10 + 3) * 5;测试看看‹/›
使用括号时,首先要计算括号内的运算。
当许多运算具有相同的优先级(例如加法和减法)时,它们是从左到右计算的:
var x = 10 + 3 - 5;测试看看‹/›
表达式求值也受操作符结合性的影响。
结合性是指整个表达式求值的方向(从右到左或从左到右)。
如果一个表达式中出现两个或多个具有相同优先级的操作符,那么将首先计算哪个操作符?算子结合性回答了这个问题。
请参考下表以解决JavaScript中的任何关联或优先级问题
运算符 | 使用描述 | 运算符结合 | 运算符优先级 |
---|---|---|---|
() | 方法/功能调用,分组 | 左到右 | 最高- 1 |
[] | 阵列存取 | 左到右 | 1 |
. | 对象属性访问 | 左到右 | 1 |
++ | 自增 | 右到左 | 2 |
-- | 自减 | 右到左 | 2 |
- | 减法 | 右到左 | 2 |
! | 逻辑非 | 右到左 | 2 |
~ | 按位非 | 右到左 | 2 |
delete | 删除数组值或对象属性 | 右到左 | 2 |
new | 创建一个对象 | 右到左 | 2 |
typeof | 返回数据类型 | 右到左 | 2 |
void | 不指定要返回的值 | 右到左 | 2 |
/ | 除法 | 左到右 | 3 |
* | 乘法 | 左到右 | 3 |
% | 求模 | 左到右 | 3 |
+ | 加法 | 左到右 | 4 |
+ | 字符串拼接 | 左到右 | 4 |
- | 减法 | 左到右 | 4 |
>> | 按位右移 | 左到右 | 5 |
<< | 按位左移 | 左到右 | 5 |
>, >= | 大于,大于或等于 | 左到右 | 6 |
<, <= | 小于,小于或等于 | 左到右 | 6 |
== | 相等 | 左到右 | 7 |
!= | 不等 | 左到右 | 7 |
=== | 一致/严格相等(相同的数据类型) | 左到右 | 7 |
!== | 不一致/严格不相等(不相同的数据类型) | 左到右 | 7 |
& | 按位与 | 左到右 | 8 |
^ | 按位异或 | 左到右 | 9 |
| | 按位或 | 左到右 | 10 |
&& | 逻辑与 | 左到右 | 11 |
|| | 逻辑或 | 左到右 | 12 |
?: | 条件分支 | 左到右 | 13 |
= | 赋值 | 右到左 | 14 |
*=, /=, %=, +=,, -=, <<=, >>=, >>>=, &=, ^=, |= | 根据前面的运算符进行分配 | 右到左 | 14 |
, | 多重评估 | 左到右 | 最低:15 |