JavaScript的相等运算符有什么区别?

JavaScript提供了两个用于比较的相等运算符:

  • 双等号(==),也称为宽松相等运算符
  • 三等号(===),也称为严格相等运算符

两者之间的关键区别在于,三等号(===)运算符比较类型和值,而双等号(==)运算符使用类型转换,使得两个操作数具有相同的类型,然后仅比较结果值。

以下是一些示例,以消除任何困惑:

const num = 0;
const str = '0';
const obj = new String(0);
const bool = false;
const undef = undefined;
const nil = null;

console.dir([
  num == str,     // 0 == 0, true
  num == bool,    // 0 == 0, true
  str == obj,     // '0' == '0', true
  obj == num,     // 0 == 0, true
  bool == str,    // 0 == 0, true
  bool == obj,    // 0 == 0, true
  bool == nil,    // false
  undef == nil,   // true
  undef == bool,  // false
]);

console.dir([
  num === str,     // 类型不匹配,false
  num === bool,    // 类型不匹配,false
  str === obj,     // 类型不匹配,false
  obj === num,     // 类型不匹配,false
  bool === str,    // 类型不匹配,false
  bool === obj,    // 类型不匹配,false
  bool === nil,    // 类型不匹配,false
  undef === nil,   // 类型不匹配,false
  undef === bool,  // 类型不匹配,false
]);

从上面的示例中可以看出,使用三等号(===)运算符比使用双等号(==)运算符更可预测和直观。因此,我们建议在大多数情况下使用三等号(===)运算符,除非您完全确定要对比较的操作数应用类型转换。