JavaScript双等号(==)与三等号(===)的区别举例详解

 更新时间:2025年07月28日 09:12:59   作者:bug_maker_996  
在JavaScript中判断值相等有两种操作符,即双等号(==)和三等号(===),这篇文章主要给大家介绍了关于JavaScript双等号(==)与三等号(===)区别的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言:

双等号与三等号区别,是近年面试的高频考点,但相信不少前端老兵都只知道大概的区别。别慌,希望看完本文章能让你掌握这个知识点。

一.等于操作符(==)

当使用双等号(==)进行比较时,JS首先会判断两个值类型是否相同。如果两个值类型相同,则直接进行比较;如果两个值类型不同,会先将比较的两个值转换为相同的类型,然后再进行比较(一般情况,下面会讲特殊情况)。

在类型转换过程中,JS遵循以下规则:

1.如果比较的两个值类型相同,则直接返回比较结果。 

console.log(1 == 1) //true

2.如果比较的两个值类型不同,则先将比较的两个值转换为相同的类型,然后再进行比较(一般情况,下面会讲特殊情况)。    

(1)如果一个值是数字,另一个值是字符串,JS会尝试将字符串转换为数字,然后再进行比较。

console.log(1 == "1") //true

(2)Boolean 和其他任何类型比较,Boolean 首先被转换为 Number 类型

console.log(true == 1) //true
console.log(true == "1") //true

(3)两个值都是引用类型且类型相同,它们指向的是同一个内存地址的话,返回true

console.log({} == {}) //false 虽然类型相同,但引用地址不同

const obj = {}
console.log(obj == obj) //true 引用地址相同

(4)如果一个值是引用类型,另一个值是原始类型,JS会尝试使用valueOf()toString()方法将引用类型转换为原始类型的值,然后再进行比较。 

console.log("[object Object]" == {}) // true, 对象和字符串比较,没有自定义valueOf方法,对象通过 toString 得到一个基本类型值

const obj = {
  valueOf: function () {
    return 1
  },
}
console.log(obj == 1) // true 对象和字符串比较,有自定义valueOf方法,调用valueOf方法

console.log("1,2,3" == [1, 2, 3]) // true, 数组和字符串比较,没有自定义valueOf方法 数组通过 toString 得到一个基本类型值

3.在特殊情况下,如果比较的两个值的类型不同,不会进行类型转换,直接进行比较。

(1)null == undefined比较结果是truenullundefined和其他任何结果的比较值都为false,但是nullnullundefinedundefinedtrue

console.log(null == undefined) //true

console.log(null == null) //true
console.log(null == "") //false
console.log(null == 0) //false
console.log(null == false) //false

console.log(undefined== undefined) //true
console.log(undefined == "") //false
console.log(undefined == 0) //false
console.log(undefined == false) //false

(2)NaN和其他任何类型比较是false(包括和它自己) 

console.log(NaN == NaN) //false
console.log(NaN == undefined) //false

二.全等操作符(===)

1.如果比较的两个值类型不同,直接返回false

console.log(1 === "1") //false

2.如果比较的两个值是数字,并且它们具有相同的值,返回true

3.如果比较的两个值是字符串,并且它们具有相同的值,返回true

4.如果比较的两个值是布尔值,并且它们具有相同的真值或假值,返回true

5.如果比较的两个值是引用类型,它们指向的是同一个内存地址,返回true

console.log({} === {}) //false 虽然类型,内容相同,但引用地址不同

const obj = {}
console.log(obj === obj) //true 引用地址相同

6.如果比较的两个值都是null或都是undefined,它们被视为相等的,返回true

console.log(null === undefined) //false

console.log(null === null) //true
console.log(null === "") //false
console.log(null === 0) //false
console.log(null === false) //false

console.log(undefined=== undefined) //true
console.log(undefined === "") //false
console.log(undefined === 0) //false
console.log(undefined === false) //false

7.NaN和其他任何类型比较是false(包括和它自己)

console.log(NaN === NaN) //false
console.log(NaN === undefined) //false
console.log(NaN === 0) //false
console.log(NaN === null) //false
console.log(NaN === "") //false

三.区别:

1.双等号比较可能会进行类型转换,是宽松比较;而三等号不会进行类型转换,是严格比较

2.nullundefined的比较不同

双等号下nullundefined比较返回为true;而三等号下nullundefined比较返回为false

console.log(null == undefined) //true
console.log(null === undefined) //false

在实际开发中更推荐用三等号进行比较,能提高安全性,因为双等号比较可能会进行类型转换,可能会带来意外的结果。当然你能正确使用双等号的话,使用双等号也无所谓,能提高代码简洁性。(但是据我所知,蛮多喜欢用双等号的前端开发者多多少少容易出bug,小编之前帮一位同事改bug,发现几个bug都是由双等号引起的)

总结

到此这篇关于JavaScript双等号(==)与三等号(===)区别的文章就介绍到这了,更多相关js双等号和三等号区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JavaScript文件引用方式及其同步执行与异步执行示例代码

    JavaScript文件引用方式及其同步执行与异步执行示例代码

    js是一门单线程语言,因此如果在js的线程中出现耗时操作,就容易堵塞后续代码的执行,这篇文章主要介绍了JavaScript文件引用方式及其同步执行与异步执行的相关资料,需要的朋友可以参考下
    2025-08-08
  • 获取url中用&隔开的参数实例(分享)

    获取url中用&隔开的参数实例(分享)

    下面小编就为大家带来一篇获取url中用&隔开的参数实例(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • countUp.js实现数字滚动效果

    countUp.js实现数字滚动效果

    这篇文章主要为大家详细介绍了countUp.js实现数字滚动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • JS生成唯一id方式之UUID和NanoID

    JS生成唯一id方式之UUID和NanoID

    这篇文章主要介绍了JS生成唯一id方式之UUID和NanoID,唯一id有了更好的方式,那就是NanoID,今天这篇文章记录一下NanoID 正在取代 UUID?及js 生成uuid及NanoID的方法,下面来看文章的详细介绍
    2021-12-12
  • JS判断用户用的哪个浏览器实例详解

    JS判断用户用的哪个浏览器实例详解

    这篇文章主要介绍了JS判断用户用的哪个浏览器的实例代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-10-10
  • TypeScript中条件类型精读与实践记录

    TypeScript中条件类型精读与实践记录

    这篇文章主要给大家介绍了关于TypeScript中条件类型精读与实践的相关资料,,条件类型就是在初始状态并不直接确定具体类型,而是通过一定的类型运算得到最终的变量类型,需要的朋友可以参考下
    2021-10-10
  • JavaScript实现带标题的图片轮播特效

    JavaScript实现带标题的图片轮播特效

    这里给大家分享的是4屏带标题和文字描述的js图片轮播代码,完美兼容IE6。图片滚动切换,鼠标放到数字选项卡即可切换图片。点击图片跳转到指定页面,有需要的小伙伴可以参考下。
    2015-05-05
  • 利用JavaScript实现3D可旋转粒子矩阵效果

    利用JavaScript实现3D可旋转粒子矩阵效果

    dat.gui.js是一个一个轻量级的图形用户界面库,或者说GUI组件,只有几十KB,可以用于创建操作控制三维场景的菜单栏等。本文将利用dat.gui.min.js实现3D可旋转粒子矩阵效果,感兴趣的可以了解一下
    2022-06-06
  • js 动态文字滚动的例子

    js 动态文字滚动的例子

    在文本框中动态滚动文字的例子,需要的朋友可以参考下。
    2011-01-01
  • javascript实现雪花飘落效果

    javascript实现雪花飘落效果

    这篇文章主要为大家详细介绍了javascript实现雪花飘落效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08

最新评论