JavaScript中==和===的区别及用法详解

 更新时间:2026年02月25日 09:27:10   作者:Yashar Qian  
在 JavaScript 中,==(相等运算符)和 ===(严格相等运算符)都用于比较两个值是否相等,但它们最大的区别在于:是否在比较之前进行类型转换,本文从多个维度详细介绍它们的区别,需要的朋友可以参考下

引言

在 JavaScript 中,==(相等运算符)和 ===(严格相等运算符)都用于比较两个值是否相等,但它们最大的区别在于:是否在比较之前进行类型转换

  • === 严格相等:不进行类型转换,如果两个值的类型不同,直接返回 false。只有类型相同且值相等时才返回 true
  • == 抽象相等:会进行类型转换,如果两个值的类型不同,它会尝试将它们转换为相同类型后再进行比较。

下面从多个维度详细介绍它们的区别。

1. 类型转换规则(==的核心)

当使用 == 比较两个不同类型的值时,JavaScript 会按照一套规则将其中一个或两个转换为原始值(primitive value),然后再比较。这套规则比较复杂,但理解它可以避免很多意外。

常见转换情况

比较类型转换规则
布尔值与其他类型布尔值 true 转换为 1false 转换为 0
字符串与数字字符串会被转换为数字(Number() 转换规则)。空字符串转为 0,非数字字符串转为 NaN
对象与原始值对象会通过 ToPrimitive 操作转换为原始值(通常先调用 valueOf(),如果没有得到原始值再调用 toString())。
nullundefinednull == undefinedtrue,且它们与自身之外的其他值比较都是 false
NaNNaN 与任何值(包括自身)使用 ===== 比较均为 false

具体例子

// 布尔值转换
console.log(true == 1);      // true,true 转为 1
console.log(false == 0);     // true,false 转为 0

// 字符串与数字
console.log('5' == 5);       // true,字符串 '5' 转为数字 5
console.log('' == 0);        // true,空字符串转为 0
console.log('hello' == 0);   // false,'hello' 转为 NaN,NaN 不等于任何数

// null 和 undefined
console.log(null == undefined); // true
console.log(null == 0);         // false
console.log(undefined == false); // false

// 对象与原始值
console.log([1,2] == '1,2');   // true,数组转为字符串 '1,2'
console.log({} == '[object Object]'); // true,对象转为字符串 '[object Object]'

// 特殊值
console.log(NaN == NaN);       // false
console.log(0 == -0);          // true(严格相等也是 true,因为 +0 和 -0 被视为相等)

2.===的行为

=== 不进行类型转换,如果类型不同就直接返回 false。类型相同的情况下,再比较值(对于原始类型)或比较引用(对于对象类型)。

console.log(5 === 5);          // true,类型相同且值相等
console.log('5' === 5);        // false,类型不同(string vs number)
console.log(null === undefined); // false,类型不同
console.log(NaN === NaN);       // false(特殊:NaN 不等于自身)
console.log(0 === -0);          // true(+0 与 -0 被视为相等)
console.log({} === {});         // false,两个不同对象,引用不同

3. 典型陷阱与注意事项

3.1null和undefined

null == undefinedtrue,但 null === undefinedfalse

使用 == 时,可以方便地判断一个变量是否为 nullundefined

if (value == null) { // 等价于 value === null || value === undefined
    // ...
}

3.2 空字符串与数字0

'' == 0      // true(空字符串转为 0)
'' === 0     // false

3.3 布尔值的隐式转换

if (x == true)  // 不要这样写,因为 true 会转为 1,导致 x 为 1 时也为 true
if (x)          // 更好的写法,利用布尔上下文

3.4 对象与原始值的比较

const a = new String('hello');
a == 'hello'   // true,对象转为原始字符串
a === 'hello'  // false,对象与字符串类型不同

4. 性能与最佳实践

  • 推荐使用 ===:大多数情况下,应该使用 === 以避免意外的类型转换导致 bug。代码意图更明确,类型安全更高。
  • 何时可以用 ==
    • 明确想利用类型转换时,例如 if (x == null) 判断 x 是否为 nullundefined
    • 某些代码风格允许在比较字符串和数字时使用 ==,但一般建议显式转换类型后再比较(如 Number(str) === num)。
  • 性能差异:现代 JavaScript 引擎对两者都做了优化,性能差距可忽略不计,主要考虑语义清晰度。

5. 补充:Object.is()

ES6 引入了 Object.is() 方法,它类似于 ===,但修复了两个特殊情况:

  • Object.is(NaN, NaN)true
  • Object.is(0, -0)false
console.log(Object.is(NaN, NaN)); // true
console.log(Object.is(0, -0));    // false

所以,Object.is 提供了最精确的“值相等”判断(对于原始值),但大多数情况下 === 已经足够。

总结对比表

比较方式是否进行类型转换类型不同时结果典型使用场景
==尝试转换后比较允许类型转换的宽松比较(需谨慎)
===直接 false绝大多数情况,更安全、明确
Object.is否(但特殊处理 NaN 和 -0)直接 false(除了 NaN)需要精确区分 NaN 和 ±0 时

理解 ===== 的区别是掌握 JavaScript 基础的重要一步。实践中保持使用 === 可以减少很多难以调试的 bug,只有在明确需要类型转换时才使用 ==,并确保自己清楚转换的后果。

以上就是JavaScript中==和===的区别及用法详解的详细内容,更多关于JavaScript ==和===区别的资料请关注脚本之家其它相关文章!

相关文章

  • 分享Bootstrap简单表格、表单、登录页面

    分享Bootstrap简单表格、表单、登录页面

    本文给大家分享Bootstrap简单表格、表单、登录页面的实例代码,非常不错,具有参考借鉴价值,需要的的朋友参考下吧
    2017-08-08
  • JS数据类型STRING使用实例解析

    JS数据类型STRING使用实例解析

    这篇文章主要介绍了JS数据类型STRING使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 让任务管理器中的CPU跳舞的js代码

    让任务管理器中的CPU跳舞的js代码

    下面的代码就是利用js控制cpu的占有率,实现时高时低效果
    2008-11-11
  • 微信小程序实现横向滚动导航栏效果

    微信小程序实现横向滚动导航栏效果

    这篇文章主要介绍了微信小程序实现横向滚动导航栏效果,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • JS正则表达式实现字符串中连续在一起的字符去重

    JS正则表达式实现字符串中连续在一起的字符去重

    这篇文章主要给大家介绍了关于JS正则表达式实现字符串中连续在一起的字符去重的相关资料,学会正则表达式对开发者而言是个非常有用的技能,很多功能可以简单的用一句正则来实现,需要的朋友可以参考下
    2023-11-11
  • JS实现数组去重的常用方法

    JS实现数组去重的常用方法

    在JavaScript开发中,数组操作是不可或缺的一部分,数组去重作为数据处理的一个常见需求,旨在从一个可能包含重复元素的数组中移除重复项,只保留唯一值,本文将详细介绍几种常见的数组去重方法,并结合实际应用场景进行探讨,需要的朋友可以参考下
    2024-12-12
  • JavaScript中时间日期函数new Date()详解(5种获取时间戳的函数)

    JavaScript中时间日期函数new Date()详解(5种获取时间戳的函数)

    这篇文章主要给大家介绍了关于JavaScript中时间日期函数new Date()的相关资料,主要讲的是JS中5种获取时间戳的函数,new Date()是JavaScript中用于获取当前日期和时间的内置函数,需要的朋友可以参考下
    2024-04-04
  • javascript使用isNaN()函数判断变量是否为数字

    javascript使用isNaN()函数判断变量是否为数字

    javascript中判断变量是否为数字的方法,这里主要介绍javascript里的 isNaN() 函数,具体使用如下,感兴趣的朋友可以参考下
    2013-09-09
  • Bootstrap实现下拉菜单效果

    Bootstrap实现下拉菜单效果

    这篇文章主要为大家详细介绍了Bootstrap实现下拉菜单效果的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • 微信小程序模板(template)使用详解

    微信小程序模板(template)使用详解

    这篇文章主要为大家详细介绍了微信小程序模板template使用的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01

最新评论