== 与 === 区别以及使用场景

1. == 与 === 有什么区别

== 会进行类型转换

  • 如果操作符两端都是简单类型,字符串和布尔值都会转成数值再比较。
  • 简单类型与引用类型比较,对象转成其原始类型的值(valueOf())再比较。
  • 两端都是引用类型,比较是否指向同一个对象。
  • null 与 undefined 相等(null == undefined → true)。
  • 等号两边存在 NaN 即为 false。

=== 不进行类型转换

undefined === undefined; // true
null === null;           // true

2. 二者的使用场景

只有一种推荐使用 == 的场景:判断对象属性是否为 null 或 undefined。

const obj = {};
if (obj.x == null) { // true,相当于 === null || === undefined
  console.log('1');
}

等价写法:

if (obj.x === null || obj.x === undefined) {
  // ...
}

除了上述场景,一律使用 ===。它语义清晰、没有隐式转换,更安全也更易调试。

来源整理自:我的有道云笔记