运算优先级在复杂运算中有着举足轻重的作用,例如我们看个表达式:
我们不妨假设,如果void的优先级更高,那么,void操作的数将是1,操作结果变成( void 1 ) + 2,也就是undefined+2,结果将是NaN。
而如果相反,+的优先级更高,那么,结果将是void (1 + 2),也就是void 3也就是undefined。
那么,究竟是哪种呢?事实是NaN,也就是说,void的优先级更高。
我们将详细列出JavaScript中常见的运算符及它们的优先关系。注意,表格从上到下,优先级越来越低。
优先级 | 运算符 | 描述 |
---|---|---|
最高 | . [ ] ( ) | 对象成员存取 数组下标 函数调用 |
从 | ++ - ~ ~ delete new typeof void | 一元运算符 |
上 | * / % | 乘法 除法 取模 |
到 | + - + | 加法 减法 字符串连接 |
下 | << >> >>> | 移位 |
的 | < <= > >= instanceof | 序列检测 继承关系 |
优 | == != === !== | 等值检测 |
先 | & | 按位与 |
级 | ^ | 按位异或 |
会 | | | 按位或 |
越 | && | 逻辑与 |
来 | || | 逻辑或 |
越 | ?: | 三元条件 |
低 | = op= | 赋值 运算赋值 |
最低 | , | 多重求值 |
同一优先级的不同或相同运算符同时出现在一个语句中时,按从左到右执行。
当然,类似CSS中的!important,JavaScript中也有一个强制改变优先级的符号,就是( ),括号内的运算会优先于括号外的运算。