JS中的双等于==比较操作符,你真的了解么?点进来检验一下

首先看以下问题,后边我会逐一讲解并总结。肯定可以让你记住。

"1" ==  1;            // ?
1 == "1";             // ?
0 == false;           // ?
0 == null;            // ?
0 == undefined;       // ?
0 == !!null;          // ?
0 == !!undefined;     // ?
null == undefined;    // ?

const number1 = new Number(3);
const number2 = new Number(3);
number1 == 3;         // ?
number1 == number2;   // ?

解析

首先双等于操作符的让人产生困扰的万恶之源就是自动类型转换

比如观察最后一个number1 == number2;二者都是Number类型的,不存在数据类型转换,而且二者是引用类型,即二者的内存地址是不一致的。故最后这个是false。

而倒数第二个number1 == 3 这是不同类型的比较,存在数据类型转换。但凡是对象与基本数据类型的比较。都是对象调用自身的valueOf/toString,进而转换为基本数据类型后再进行比较。而number1.valueOf()的值就是3。故倒数第二个为true。

怎么样是不是有些感觉了。总之不同类型的比较按照以下规则去转换。就可以容易的推断出结果了

  • 字符串与数字类型比较,字符串会尝试转换为数字后进行比较
  • 布尔类型与不同类型的比较,布尔类型会转换为 数组类型 0 1 后再进行比较
  • null==undefined,此外二者不再等于任何基本数据类型

通过以上的规则是不是你已经对文章开头的问题有答案了?

答案

"1" ==  1;            // true
1 == "1";             // true
0 == false;           // true
0 == null;            // false
0 == undefined;       // false
0 == !!null;          // true
0 == !!undefined;     // true
null == undefined;    // true

const number1 = new Number(3);
const number2 = new Number(3);
number1 == 3;         // true
number1 == number2;   // false

其实MDN的官方文档中还有一些细节。但整体是这样的,可以点击下面的链接去参考。

参考: MDN足够官方,并且很容易懂。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值