JavaScript==和===有什么区别

63 阅读3分钟

JavaScript==和===有什么区别

在 JavaScript 中,===== 是两种比较运算符,它们的主要区别在于 类型检查类型转换。以下是它们的详细对比:

1. ==(宽松相等)

(1) 定义

  • 宽松相等:比较两个值是否相等,允许类型转换。
  • 类型转换规则
    • 如果类型不同,会尝试将值转换为相同类型后再比较。
    • 转换规则复杂,可能导致意外结果。

(2) 示例

console.log(1 == '1'); // true(字符串 '1' 转换为数字 1)
console.log(true == 1); // true(布尔值 true 转换为数字 1)
console.log(null == undefined); // true(特殊规则)
console.log([] == false); // true(空数组转换为数字 0)

(3) 类型转换规则

  • 数字与字符串:字符串转换为数字。
  • 布尔值与其他类型:布尔值转换为数字(true1false0)。
  • 对象与原始值:对象通过 valueOf()toString() 转换为原始值。

2. ===(严格相等)

(1) 定义

  • 严格相等:比较两个值是否相等,不允许类型转换。
  • 类型检查:如果类型不同,直接返回 false

(2) 示例

console.log(1 === '1'); // false(类型不同)
console.log(true === 1); // false(类型不同)
console.log(null === undefined); // false(类型不同)
console.log([] === false); // false(类型不同)

(3) 特点

  • 更安全:避免类型转换导致的意外结果。
  • 更直观:类型和值都必须相同才返回 true

3. 主要区别

特性==(宽松相等)===(严格相等)
类型检查允许类型转换不允许类型转换
性能较慢(需进行类型转换)较快(直接比较)
安全性可能导致意外结果更安全,避免意外结果
推荐使用不推荐推荐

4. 特殊比较规则

(1) nullundefined

  • ==null == undefined 返回 true
  • ===null === undefined 返回 false

(2) NaN

  • NaN 与任何值比较(包括自身)都返回 false
    console.log(NaN == NaN); // false
    console.log(NaN === NaN); // false
    

(3) 对象比较

  • =====:比较的是引用地址,而非内容。
    const obj1 = {};
    const obj2 = {};
    console.log(obj1 == obj2); // false
    console.log(obj1 === obj2); // false
    

5. 使用建议

  1. 优先使用 ===:避免类型转换导致的意外结果,代码更安全、可读性更高。
  2. 仅在明确需要类型转换时使用 ==:例如判断变量是否为 nullundefined
    if (value == null) {
      // 等同于 value === null || value === undefined
    }
    

6. 示例对比

(1) 数字与字符串

console.log(0 == '0'); // true(字符串 '0' 转换为数字 0)
console.log(0 === '0'); // false(类型不同)

(2) 布尔值与其他类型

console.log(false == '0'); // true(字符串 '0' 转换为数字 0,false 也转换为 0)
console.log(false === '0'); // false(类型不同)

(3) 对象与原始值

console.log([] == 0); // true(空数组转换为空字符串 '',再转换为数字 0)
console.log([] === 0); // false(类型不同)

总结

场景使用 ==使用 ===
类型检查允许类型转换不允许类型转换
安全性可能导致意外结果更安全,避免意外结果
推荐使用仅在明确需要类型转换时使用优先使用

理解 ===== 的区别有助于编写更健壮、可维护的 JavaScript 代码。

更多vue相关插件及后台管理模板可访问vue admin reference,代码详情请访问github