为什么 == 和 === 在 JavaScript 中表现不同

发布: (2025年12月13日 GMT+8 00:51)
3 min read
原文: Dev.to

Source: Dev.to

严格相等 (===)

=== 检查两件事:

  1. 值是否相同?
  2. 类型是否相同?

必须同时满足这两个条件。

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
布尔值 → 数字true1
数组 → 字符串[]""
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" === 3false
=="3" == 3true

简短版

  • === 严格且可预测。
  • == 会进行类型强制转换,可能会产生混乱。

使用 === 能让逻辑更清晰,避免意外。

Back to Blog

相关文章

阅读更多 »