js相等和全等你真的了解嘛
你有仔细了解(相等)==和(全等)===的区别么?
开胃菜
废话少说,我们直接从题目入手,判断true或者false:
1 |
|
那么,答案是多少呢?放入浏览器,我们很容易知道答案:
1 | 6==6; |
我们知道,==会先检查两个操作数的数据类型是否相同,如果相同,则比较两个数是否相等,如果不同,则先将两个数转换为相同数据类型,再进行比较。
那么,6==6和6===6就不用说了,肯定为true,而6=="6",则是会把字符类型的6转换为数字类型的6,再同时比较,所以,为true。由此,因为全等是包含数据类型也要相等的,所以6==="6"为false。
简单嘛?我们现在开始来看一点不一样的** (^_^)
1 | true == 1; |
好,我们来揭晓答案。
1 | true ==1; |
在JavaScript中,常常会把1表示true,也就是有,0表示false,及没有,不存在。在全等中,0是数字类型,false为布尔类型,类型都不相等,所以为false咯。
简单吧?下个走起~** (^_^)
同理,判断一下结果:
1 | ''==0; |
好,揭晓答案:
1.在''==0中,我么知道,0表示无,没有,所以,这里会0会转换成字符串类型是为空,即没有,所以为true。
2.在' '==0;中,同理,单引号里的空格也是没有,所以转换之后为0,及true。
3.null在JavaScript中表示空值,也就是说,当前不应该有对应的值,希望表示 一个对象被人为的重置为空对象,而非一个变量最原始的状态 。undefined的字面意思就是未定义的值的变量,或者为声明的变量,这个值的语义是,希望表示一个变量最原始的状态,而非人为操作的结果。既然 null 和 undefined 的行为很相似,并且都表示 一个无效的值,那么它们所表示的内容也具有相似性。所以,在ECMScript中认为null == undefined 为 true
4.根据3,null在比较的时候不会转换任何类型,为false;
5.根据3,undefined与4同理,为false。
还行吧?下个走起~ (^_^)
1 | 'false'== false; |
相信很多同学在第一题中肯定会回答为true ,理由是因为==可以类型转换比较。在JavaScript中,布尔值会转成数字类型,true转成1,false转成0。数字和字符串比较,字符串会转换成数字。所以,这俩都不相同,正解为false。
NaN 是一个特殊值,它是属于数字类型的。NaN一般说明某些算术运算(如求负数的平方根)的结果不是数字(Not a Number)。所以,我们可以理解为它只表是某一种状态的范围值,并不能确切到具体。因此,自身就无法相等了,故NaN==NaN 为 false。
同理,NaN == false和NaN === false都为false咯。不能和自身相等了。
好了,重点来啦!
我们先来看看下面的题:
1 | var a={},b={}; |
这里创建了两个对象,如果两个操作数都指向同一个对象,这样会返回为true , a,b都创建了一个空对象,对于引用对象的比较,比的是其地址的值,而不是其真实的值。
故,a==b和a===b为false 。然而,这里把a赋值给c,也就是c指向的堆内存指针也会指向a的,故值,对象地址都会相等,a==c和a===c为true啦!






