JavaScript 运算符优先级
运算符优先级(Operator Precedence)描述了算术表达式中运算的执行顺序。
乘法 (*) 和除法 (/) 的优先级高于加法 (+) 和减法 (-)。
实例
与传统数学一样,先进行乘法运算:
let x = 100 + 50 * 3;
使用圆括号时,先计算圆括号内的运算:
let x = (100 + 50) * 3;
优先级相同的运算(如 * 和 /)从左到右计算:
let x = 100 / 50 * 3;
运算符优先级值
括号中的表达式在表达式的其余部分之前计算,函数在结果用于表达式的其余部分之前执行:
| 优先级 | 运算符 | 描述 | 例子 | 
|---|---|---|---|
| 18 | ( ) | 表达式分组 | (100 + 50) * 3 | 
| 17 | . | 属于成员 | person.name | 
| 17 | [] | 属于成员 | person["name"] | 
| 17 | ?. | 可选链 ES2020 | x ?. y | 
| 17 | () | 函数调用 | myFunction() | 
| 17 | new | 带参的新建 | new Date("June 5,2022") | 
| 16 | new | 不带参的新建 | new Date() | 
| 增量运算符后缀递增在前缀递增之前执行。 | |||
| 15 | ++ | 后缀递增 | i++ | 
| 15 | -- | 后缀递减 | i-- | 
| 14 | ++ | 前缀递增 | ++i | 
| 14 | -- | 前缀递减 | --i | 
| NOT 运算符 | |||
| 14 | ! | 逻辑非 | !(x==y) | 
| 14 | ~ | 按位非 | ~x | 
| 一元运算符 | |||
| 14 | + | 一元加 | +x | 
| 14 | - | 一元减 | -x | 
| 14 | typeof | 数据类型 | typeof x | 
| 14 | void | 评估空 | void(0) | 
| 14 | delete | 属性删除 | delete myCar.color | 
| 算术运算符指数运算在乘法之前执行。 乘法和除法在加法和减法之前执行。 | |||
| 13 | ** | 指数运算 ES2016 | 10 ** 2 | 
| 12 | * | 乘 | 10 * 5 | 
| 12 | / | 除 | 10 / 5 | 
| 12 | % | 除法余数 | 10 % 5 | 
| 11 | + | 加 | 10 + 5 | 
| 11 | - | 减 | 10 - 5 | 
| 11 | + | 串联 | "Bill" + "Gates" | 
| 移位运算符 | |||
| 10 | << | 左移 | x << 2 | 
| 10 | >> | 右移(带符号) | x >> 2 | 
| 10 | >>> | 右移(无符号) | x >>> 2 | 
| 关系运算符 | |||
| 9 | in | 对象中的属性 | "PI" in Math | 
| 9 | instanceof | 对象的实例 | x instanceof Array | 
| 比较运算符 | |||
| 9 | < | 小于 | x < y | 
| 9 | <= | 小于或等于 | x <= y | 
| 9 | > | 大于 | x > y | 
| 9 | >= | 大于或等于 | x >= Array | 
| 8 | == | 等于 | x == y | 
| 8 | === | 严格相等 | x === y | 
| 8 | != | 不相等 | x != y | 
| 8 | !== | 严格不相等 | x !== y | 
| 位运算符 | |||
| 7 | & | 按位与 | x & y | 
| 6 | ^ | 按位异或 | x ^ y | 
| 5 | | | 按位或 | x | y | 
| 逻辑运算符 | |||
| 4 | && | 逻辑与 | x && y | 
| 3 | || | 逻辑或 | x || y | 
| 3 | ?? | 空值合并 ES2020 | x ?? y | 
| 条件(三元)运算符 | |||
| 2 | ? : | 条件 | ? "yes" : "no" | 
| 赋值运算符赋值在其他操作之后执行。 | |||
| 2 | = | 简单赋值 | x = y | 
| 2 | : | 冒号赋值 | x: 5 | 
| 2 | += | 加法赋值 | x += y | 
| 2 | -= | 减法赋值 | x -= y | 
| 2 | *= | 乘法赋值 | x *= y | 
| 2 | **= | 指数赋值 | x **= y | 
| 2 | /= | 除法赋值 | x /= y | 
| 2 | %= | 取余赋值 | x %= y | 
| 2 | <<= | 左移赋值 | x <<= y | 
| 2 | >>= | 右移赋值 | x >>= y | 
| 2 | >>>= | 无符号右移 | x >>>= y | 
| 2 | &= | 位与赋值 | x &= y | 
| 2 | |= | 位或赋值 | x |= y | 
| 2 | ^= | 位异或赋值 | x ^= y | 
| 2 | &&= | 逻辑与赋值 | x &= y | 
| 2 | ||= | 逻辑或赋值 | x ||= y | 
| 2 | => | 箭头 | x => y | 
| 2 | yield | 暂停 / 恢复 | yield x | 
| 2 | yield* | 委托运算符 | yield* x | 
| 2 | ... | 展开运算符 | ... x | 
| 1 | , | 逗号 | x , y |