JavaScript参考手册
Operators
Operator Precedence
运算符的优先级决定了表达式中运算执行的先后顺序,优先级高的运算符最先被执行。
下面是一个简单的例子:
3 + 4 * 5 // returns 23
乘法运算符 ("*
")比起加法运算符("+
")有着更高的优先级,所以它会被最先执行。
结合性
结合性决定了拥有相同优先级的运算符的执行顺序。考虑下面这个表达式:
a OP b OP c
左结合(从左到右计算)相当于把左边的子表达式加上小括号(a OP b) OP c
,类似的,右关联(从右到左计算)相当于a OP (b OP c)
。赋值运算符是右关联的,所以你可以这么写:
a = b = 5;
结果 a
和 b
的值都会成为5。这是因为赋值运算符的返回结果就是赋值运算符右边的那个值,具体过程是:b
被赋值为5,然后a
也被赋值为 b=5
的返回值,也就是5。
汇总表
下面的表将所有运算符按照优先级的不同从高到低排列。
Precedence |
Operator type |
Associativity |
Individual operators |
---|---|---|---|
20 |
Grouping |
n/a |
( … ) |
19 |
Member Access |
left-to-right |
… . … |
Computed Member Access |
left-to-right |
… … |
|
new (with argument list) |
n/a |
new … ( … ) |
|
Function Call |
left-to-right |
… ( … ) |
|
18 |
new (without argument list) |
right-to-left |
new … |
17 |
Postfix Increment |
n/a |
… ++ |
Postfix Decrement |
n/a |
… -- |
|
16 |
Logical NOT |
right-to-left |
! … |
Bitwise NOT |
right-to-left |
~ … |
|
Unary Plus |
right-to-left |
|
|
Unary Negation |
right-to-left |
|
|
Prefix Increment |
right-to-left |
++ … |
|
Prefix Decrement |
right-to-left |
-- … |
|
typeof |
right-to-left |
typeof … |
|
void |
right-to-left |
void … |
|
delete |
right-to-left |
delete … |
|
15 |
Exponentiation |
right-to-left |
… ** … |
14 |
Multiplication |
left-to-right |
… * … |
Division |
left-to-right |
… / … |
|
Remainder |
left-to-right |
… % … |
|
13 |
Addition |
left-to-right |
… + … |
Subtraction |
left-to-right |
… - … |
|
12 |
Bitwise Left Shift |
left-to-right |
… << … |
Bitwise Right Shift |
left-to-right |
… >> … |
|
Bitwise Unsigned Right Shift |
left-to-right |
… >>> … |
|
11 |
Less Than |
left-to-right |
… < … |
Less Than Or Equal |
left-to-right |
… <= … |
|
Greater Than |
left-to-right |
… > … |
|
Greater Than Or Equal |
left-to-right |
… >= … |
|
in |
left-to-right |
… in … |
|
instanceof |
left-to-right |
… instanceof … |
|
10 |
Equality |
left-to-right |
… == … |
Inequality |
left-to-right |
… != … |
|
Strict Equality |
left-to-right |
… === … |
|
Strict Inequality |
left-to-right |
… !== … |
|
9 |
Bitwise AND |
left-to-right |
… & … |
8 |
Bitwise XOR |
left-to-right |
… ^ … |
7 |
Bitwise OR |
left-to-right |
… | … |
6 |
Logical AND |
left-to-right |
… && … |
5 |
Logical OR |
left-to-right |
… || … |
4 |
Conditional |
right-to-left |
… ? … : … |
3 |
Assignment |
right-to-left |
… = … |
| … += … |
| … -= … |
| … **= … |
| … *= … |
| … /= … |
| … %= … |
| … <<= … |
| … >>= … |
| … >>>= … |
| … &= … |
| … ^= … |
| … |= … |
| 2 | yield | right-to-left | yield … |
| yield* | right-to-left | yield* … |
| 1 | Spread | n/a | ... … |
| 0 | Comma / Sequence | left-to-right | … , … |
Operators相关
JavaScript 是一种高级编程语言,通过解释执行,是一门动态类型,面向对象(基于原型)的解释型语言。它已经由ECMA(欧洲电脑制造商协会)通过 ECMAScript 实现语言的标准化。它被世界上的绝大多数网站所使用,也被世界主流浏览器( Chrome、IE、FireFox、Safari、Opera )支持。JavaScript 是一门基于原型、函数先行的语言,是一门多范式的语言,它支持面向对象编程,命令式编程,以及函数式编程。它提供语法来操控文本、数组、日期以及正则表达式等,不支持 I/O,比如网络