为什么 == 和 === 在 JavaScript 中表现不同
发布: (2025年12月13日 GMT+8 00:51)
3 min read
原文: Dev.to
Source: Dev.to
严格相等 (===)
=== 检查两件事:
- 值是否相同?
- 类型是否相同?
必须同时满足这两个条件。
5 === 5 // true
5 === "5" // false
true === 1 // false
null === undefined // false
如果类型不匹配,JavaScript 会直接返回 false,不会进行任何转换。
宽松相等 (==)
== 会“帮忙”地在比较之前先转换值(类型强制转换)。
5 == "5" // true (string → number)
true == 1 // true (boolean → number)
false == 0 // true
null == undefined // true (特殊情况)
一些令人惊讶的情况
"" == 0 // true
"0" == 0 // true
[] == 0 // true
为什么会出现这种情况
使用 == 时,JavaScript 会自动尝试把操作数转换为相同的类型:
| 转换方式 | 从 → 到 |
|---|---|
| 字符串 → 数字 | "5" → 5 |
| 布尔值 → 数字 | true → 1 |
| 数组 → 字符串 | [] → "" |
null / undefined | 只相等于彼此 |
这些隐式步骤就是 == 会产生混乱结果的原因。
应该使用哪一个?
对于初学者——以及大多数情况——推荐使用 严格相等:
// Use ===
它可预测且避免意外的类型强制转换。
只有在完全理解转换规则或确实需要 null == undefined 这种特殊情况时才使用 ==。
简单演示
console.log(0 == false); // true
console.log(0 === false); // false
console.log("5" == 5); // true
console.log("5" === 5); // false
在控制台运行这些代码片段即可立即看到差异。
快速概览
| 比较方式 | 检查类型? | 转换值? | 示例 |
|---|---|---|---|
=== | 是 | 否 | "3" === 3 → false |
== | 否 | 是 | "3" == 3 → true |
简短版
===严格且可预测。==会进行类型强制转换,可能会产生混乱。
使用 === 能让逻辑更清晰,避免意外。