5月27日 01:17

== 和 === 的区别是什么?什么情况下用 == 相等?

=== 是严格相等:类型不同直接 false,类型相同才比较值。

== 是宽松相等:类型不同时做类型转换(强制类型转换),然后再比较。

大多数场景用 ===。但 == 也有实际用途:

  • if (x == null) —— 等价于 x === null || x === undefined,很简洁
  • 你明确知道两端类型相同时(和 === 没区别)
  • 处理字符串和数字比较时('5' == 5 是 true),比如从 input 里读出来的值
javascript
// == 的经典坑 '' == 0; // true [] == 0; // true [] == ''; // true [] == ![]; // true (?!) null == undefined; // true NaN == NaN; // false (即使 === 也是 false)

追问

Object.is 和 === 有什么区别?

两个不同:Object.is(NaN, NaN) 是 true(=== 是 false),Object.is(0, -0) 是 false(=== 是 true)。其他行为和 === 完全一致。

if (x == null)if (x === null || x === undefined) 有什么风险吗?

几乎没有。== null 只在值为 nullundefined 时为 true,对 0''false 都是 false。这是 == 唯一一个业界认可的"干净"用法。

标签:JavaScript前端