JavaScript中运算符的优先级

运算符优先级

JavaScript中的运算符优先级是一套规则。该规则在计算表达式时控制运算符执行的顺序。具有较高优先级的运算符先于较低优先级的运算符执行。例如,乘法的执行先于加法。

下表按从最高到最低的优先级列出JavaScript运算符。具有相同优先级的运算符按从左至右的顺序求值。

EDIT

下面的表将所有运算符按照优先级的不同从高到低排列。

优先级运算类型关联性运算符
20圆括号n/a( … )
19成员访问从左到右… . …
需计算的成员访问从左到右… [ … ]
new (带参数列表)n/anew … ( … )
18函数调用从左到右… ( )
new (无参数列表)从右到左new …
17后置递增(运算符在后)n/a… ++
后置递减(运算符在后)n/a… --
16逻辑非从右到左! …
按位非从右到左~ …
一元加法从右到左+ …
一元减法从右到左- …
前置递增从右到左++ …
前置递减从右到左-- …
typeof从右到左typeof …
void从右到左void …
delete从右到左delete …
15从右到左… ** …
14乘法从左到右… * …
除法从左到右… / …
取模从左到右… % …
13加法从左到右… + …
减法从左到右… - …
12按位左移从左到右… << …
按位右移从左到右… >> …
无符号右移从左到右… >>> …
11小于从左到右… < …
小于等于从左到右… <= …
大于从左到右… > …
大于等于从左到右… >= …
in从左到右… in …
instanceof从左到右… instanceof …
10等号从左到右… == …
非等号从左到右… != …
全等号从左到右… === …
非全等号从左到右… !== …
9按位与从左到右… & …
8按位异或从左到右… ^ …
7按位或从左到右… | …
6逻辑与从左到右… && …
5逻辑或从左到右… || …
4条件运算符从右到左… ? … : …
3赋值从右到左… = …
… += …
… -= …
… *= …
… /= …
… %= …
… <<= …
… >>= …
… >>>= …
… &= …
… ^= …
… |= …
2yield从右到左yield …
yield*从右到左yield* …
1展开运算符n/a...
0逗号从左到右… , …
运算符描述
. [] ()字段访问、数组下标、函数调用以及表达式分组
++ -- - ~ ! delete new typeof void一元运算符、返回数据类型、对象创建、未定义值
* / %乘法、除法、取模
+ - +加法、减法、字符串连接
<< >> >>>移位
< <= > >= instanceof小于、小于等于、大于、大于等于、instanceof
== != === !==等于、不等于、严格相等、非严格相等
&按位与
^按位异或
|按位或
&&逻辑与
||逻辑或
?:条件
= oP=赋值、运算赋值
,多重求值

圆括号可用来改变运算符优先级所决定的求值顺序。这意味着圆括号中的表达式应在其用于表达式的其余部分之前全部被求值。

z = 78 * (96 + 3 + 45)

在该表达式中有五个运算符: =, *, (), +, 以及另一个 +。根据运算符优先级的规则,它们将按下面的顺序求值: (), +, +, *, =。

首先对圆括号内的表达式求值。圆括号中有两个加法运算符。因为两个加法运算符具有相同的优先级,从左到右求值。先将 96 和 3 相加,然后将其和与 45 相加,得到的结果为 144。

然后是乘法运算。78 乘以 144,得到结果为 11232。

A最后是赋值运算。将 11232 赋给 z。