运算符的优先级
所有运算符都拥有各自的优先级,优先级较高的运算符会先生效,优先连接左右两侧的值进行计算,然后优先级较低的运算符生效。如果运算符的优先级相等,则遵循从左到右的原则。
举一个简单的例子,在进行算术运算时,乘除法运算符的优先级高于加减法的优先级,示例代码如下。
let a: number = 1 + 2 * 3 + 4; //最终值为11
但如果加入括号,优先级就发生改变,会先计算括号内的内容,然后再计算括号外的内容。
let a: number = (1 + 2) * (3 + 4); //最终值为21
所有运算符都拥有各自的优先级。表4-11 列出了主要运算符的优先级。
优先级 | 运算符 | 描述 |
---|---|---|
1 |
() |
表达式分组 |
2 |
|
成员(后面会详细介绍) |
2 |
|
成员(后面会详细介绍) |
2 |
|
函数调用(后面会详细介绍) |
2 |
new |
创建(后面会详细介绍) |
3 |
|
后缀递增 |
3 |
|
后缀递减 |
4 |
++ |
前缀递增 |
4 |
— |
前缀递减 |
4 |
! |
逻辑否 |
4 |
typeof |
判断类型 |
5 |
|
求幂 |
6 |
|
乘 |
6 |
|
除 |
6 |
|
取余 |
7 |
|
加 |
7 |
|
减 |
8 |
|
左位移 |
8 |
|
右位移 |
8 |
>>> |
右位移(无正负符号) |
9 |
|
小于 |
9 |
|
小于或等于 |
9 |
|
大于 |
9 |
|
大于或等于 |
9 |
in |
遍历(后面会详细介绍) |
9 |
instanceof |
类型断言 |
10 |
== |
相等 |
10 |
|
严格相等 |
10 |
!= |
不相等 |
10 |
!== |
严格不相等 |
11 |
& |
按位与 |
12 |
^ |
按位异或 |
13 |
| |
按位或 |
14 |
&& |
逻辑与 |
15 |
|| |
逻辑否 |
16 |
?: |
条件 |
17 |
= |
赋值 |
17 |
+= |
赋值 |
17 |
-= |
赋值 |
17 |
*= |
赋值 |
17 |
%= |
赋值 |
17 |
&= |
赋值 |
17 |
^= |
赋值 |
17 |
|= |
赋值 |
18 |
yield |
暂停函数(后续章节介绍) |
19 |
, |
逗号 |