非常教程

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 | … , … |

JavaScript

JavaScript 是一种高级编程语言,通过解释执行,是一门动态类型,面向对象(基于原型)的解释型语言。它已经由ECMA(欧洲电脑制造商协会)通过 ECMAScript 实现语言的标准化。它被世界上的绝大多数网站所使用,也被世界主流浏览器( Chrome、IE、FireFox、Safari、Opera )支持。JavaScript 是一门基于原型、函数先行的语言,是一门多范式的语言,它支持面向对象编程,命令式编程,以及函数式编程。它提供语法来操控文本、数组、日期以及正则表达式等,不支持 I/O,比如网络