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
啦!