JavaScript 运算符对照表

免费使用 超详细版 可复制

JavaScript 运算符完整速查表,涵盖算术、比较、逻辑、位运算、赋值、三元、可选链 ?.、空值合并 ??、typeof、in、delete 等全部内容,并包含 ES2015~ES2022 新增运算符。每条均配示例与结果说明。

分类 运算符 名称 示例代码 结果 说明 / 注意事项
算术运算符
+ 加法 / 拼接 1 + 2 3 数字相加;任一操作数为字符串则变为拼接
+ 字符串拼接 "hello" + " " + "world" "hello world" JS 特有:+ 号兼具加法和拼接两种语义
- 减法 5 - 3 2 自动将操作数转为数字
* 乘法 3 * 4 12
/ 除法 10 / 3 3.3333333333333335 JS 除法始终返回浮点数,无整数除法
% 取模 10 % 3 1 结果符号与被除数相同
** 幂运算 2 ** 10 1024 ES2016 引入,等价于 Math.pow()
++ 自增 let a=5; a++; 6 前缀先加后用,后缀先用后加
-- 自减 let a=5; a--; 4 同上
-(一元) 一元取负 -(-5) 5 对数值取反;对非数字会尝试转换
+(一元) 一元正号 +'-3' 3 尝试将操作数转为数字,常用于类型转换
比较运算符
== 等于(松散) 5 == "5" true 会进行类型转换,不推荐在业务代码中使用
=== 严格等于 5 === "5" false 推荐始终使用 ===,不转换类型直接比较
!= 不等于(松散) 5 != "3" true 同 == 一样会类型转换
!== 严格不等于 5 !== "5" true 推荐始终使用 !==
> 大于 5 > 3 true 字符串按字典序比较
< 小于 3 < 5 true
>= 大于等于 5 >= 5 true
<= 小于等于 3 <= 5 true
逻辑运算符
&& 逻辑与(短路) true && false false 左为 true 时返回右操作数,否则返回左操作数
|| 逻辑或(短路) false || "default" "default" 常用于默认值赋值:a = a || "默认值"
! 逻辑非 !true false 隐式转为布尔值后取反
位运算符
& 按位与 5 & 3 1 32 位整数运算,结果转为有符号整数
| 按位或 5 | 3 7
^ 按位异或 5 ^ 3 6
~ 按位取反 ~5 -6 等价于 -(x+1)
<< 左移 5 << 1 10 左移 n 位等价于乘以 2^n
>> 有符号右移 -8 >> 1 -4 保留符号位
>>> 无符号右移 -1 >>> 0 4294967295 高位补 0,结果始终为非负
赋值运算符
= 赋值 let a = 10; a = 10 将右值赋给变量
+= 加等 a += 3; a = a + 3 字符串也适用:拼接后赋值
-= 减等 a -= 3; a = a - 3
*= 乘等 a *= 3; a = a * 3
/= 除等 a /= 3; a = a / 3
%= 模等 a %= 3; a = a % 3
**= 幂等 a **= 2; a = a ** 2 ES2016
<<= 左移等 a <<= 1; a = a << 1
>>= 右移等 a >>= 1; a = a >> 1
>>>= 无符号右移等 a >>>= 1; a = a >>> 1
&= |= ^= 位运算赋值 a &= 3; a = a & 3 按位运算后赋值
三元运算符
? : 条件(三目) age >= 18 ? "成年" : "未成年" "成年" 可嵌套但建议不超过一层
ES2020+ 新运算符
?. 可选链 obj?.user?.name undefined(安全) 左侧为 null/undefined 时短路返回 undefined
?? 空值合并 null ?? "默认" "默认" 仅当左侧为 null 或 undefined 时取右侧
??= 空值合并赋值 a ??= "默认" a = a ?? "默认" a 为 null/undefined 时才赋值
ES2021+ 新运算符
&&= 逻辑与赋值 a &&= b a = a && b a 为真时才赋值
||= 逻辑或赋值 a ||= "默认" a = a || "默认" a 为假时才赋值
类型运算符
typeof 类型检测 typeof "hello" "string" 返回字符串形式的类型名
instanceof 实例检测 [] instanceof Array true 检测原型链上是否存在构造函数
in 属性存在 "name" in {name:"test"} true 检测对象自有或继承属性
其他运算符
delete 删除属性 delete obj.key true 删除对象属性或数组元素(数组长度不变)
void 返回 undefined void 0 undefined 常用于
, 逗号运算符 (a=1, b=2, a+b) 3 从左到右依次执行,返回最后一个表达式的值
ES2015+ 展开/剩余
... 展开运算符 [...arr1, ...arr2] 合并数组 展开可迭代对象;函数参数中收集剩余参数
... 剩余参数 function f(...args){} args 为数组 收集剩余参数为数组,替代 arguments
ES2015+ 解构
[]={} 解构赋值 const [a,b] = [1,2] a=1, b=2 数组解构和对象解构,支持默认值
优先级(高→低)
() 分组 (a + b) * c 先算括号 最高优先级
++ -- ! typeof void delete 单目前缀 !flag
** 幂运算 2 ** 3 ** 2 512(右结合) 幂运算从右向左结合
* / % 乘除模 a * b / c
+ - 加减 a + b
<< >> >>> 位移
< <= > >= in instanceof 比较
== != === !== 相等
& 按位与
^ 按位异或
| 按位或
&& 逻辑与
|| 逻辑或
?? 空值合并
优先级(低→高)
? : 三元
优先级(最低)
= += 等 赋值 从右向左结合

JavaScript 运算符注意事项

  • • 始终使用 === 和 !==,避免 == 隐式类型转换带来的坑(如 0 == "" 为 true)
  • • + 号是 JS 最易出错的运算符:数字相加 vs 字符串拼接取决于操作数类型
  • • ?? 和 || 的区别:?? 只对 null/undefined 生效,|| 对所有假值(0、""、false)生效
  • • ?. 可选链可安全访问深层属性,避免 Cannot read property of undefined 错误
  • • typeof null 返回 "object",这是历史遗留 bug,判断 null 请用 val === null
  • • 位运算会将操作数转为 32 位有符号整数,不适合处理大数(>2^31-1)
  • • ** 是右结合的:2 ** 3 ** 2 = 2 ** 9 = 512
  • • 逗号运算符 , 返回最后一个表达式的值,常用于 for 循环和简洁代码

?? vs ||

?? 只排除 null/undefined;|| 排除所有假值(0、""、false)

?. 安全访问

obj?.a?.b 任何一层为 null/undefined 都返回 undefined,不抛错

类型转换陷阱

+ 号遇字符串变拼接;! 转布尔取反;== 隐式转换规则复杂

位运算限制

操作数先转 32 位整数,超过 2^31-1 会溢出,不适合大数