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

news/2024/7/19 12:51:58 标签: javascript, js, 前端

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

javascript">"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,此外二者不再等于任何基本数据类型

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

答案

javascript">"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足够官方,并且很容易懂。


http://www.niftyadmin.cn/n/1383113.html

相关文章

Java 中内部类、静态内部类、枚举类的知识

1、内部类 内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限)。内部类主要有以下几类&a…

ReSharper.8.0.14.856注册码

用户名:ronle 注册码:ZoJzmeVBoAv9Sskw76emgksMMFiLn4NM转载于:https://www.cnblogs.com/dongzhaosheng/p/5314038.html

低代码平台的价格范围及购买成本分析

Zoho Creator是一款强大而灵活的低代码应用程序开发平台,可帮助企业快速、高效地创建各种应用程序。但是,很多人可能会担心它的价格问题。在这篇文章中,我们将深入探讨Zoho Creator的定价策略和计划,以帮助您更好地理解其价格结构…

常用存储器介绍

存储器种类存储器是计算机结构的重要组成部分。存储器是用来存储程序代码和数据的部件,有了存储器计算机才具有记忆功能。基本的存储器种类见图 22-1。 存储器按其存储介质特性主要分为“易失性存储器”和“非易失性存储器”两大类。其中的“易失/非易失”是指存储…

接口安全

交换机的端口安全专题情景一一个接口只能接一台计算机(一夫一妻),接口和计算机的mac地址绑定,此接口只能和此主机绑定,如果换了主机就shutdown,感觉有点贞操锁的意思!!Switch(config…

20145303刘俊谦 Java 代码托管

(20145303刘俊谦) Java 第三周代码托管 这是最近保存下来的代码,今天一起上传的,有很多在代码学习过程中无意识删掉了: 转载于:https://www.cnblogs.com/ljq007/p/5316966.html

html2canvas显示错位,空白,跨域的问题解决,以及一些坑

首先目前几个rc版本可能表现是不一致的。比如rc5就很容易有问题。我目前使用rc1.感觉这个问题少一些。值得注意的是,如果使用Npm安装的话,要么锁版本,要么指定明确的版本。即: // 使用--sav-exact 锁定版本 npm install html2can…

Centos6.4系统文件服务之NFS

1.查看nfs软件是否安装和启动服务[rootlocalhost ~]# rpm -aq |egrep nfs|rpcbindrpcbind-0.2.0-11.el6.i686nfs-utils-1.2.3-36.el6.i686nfs-utils-lib-1.1.5-6.el6.i686[rootlocalhost ~]# /etc/init.d/rpcbind restartStopping rpcbind: …