深入透辟又简单的理解==比较符

深入透彻又简单的理解==比较符

一句话理解

 

==比较先把两侧的值转化为基本数据类型

也就是Number/String/布尔

 

如果两个基本数据类型不同

然后将基本数据类型转化为数字进行比较

如果相同直接比较值

 

看比较

 

"abc" == "abc"

都是字符串,类型相同,直接比较值,所以为true

 

"1abc" == 1

不同类型 Number("1abc")为NaN

NaN == 1为false

 

[] == []

两个对象,类型相同,不会转化,但是是两个不同的实例对象,所以为false

 

[] == ![]

左侧为对象,右侧为布尔,所以进行转化

[]转化为基本数据类型使用toString方法,值为""

![]为false,可以通过Boolean(![])进行验证

false转化为数字Number(false)为0

""转化为数字Number("")为0

所以相等

 

[] == true

不同类型

[]最终转化为数字为0

true转化为数字为1

所以为false

 

[] == false

同上,所以为true

 

var b = function(){};

b == true

b为对象,转化使用toString

字符串是"function(){}"

转化为Number,使用Number("function(){}")为NaN

所以为NaN == 1结果为false

 

同样

b == false也是

NaN == 0 结果还是false

 

差不多就这些吧,谁再看到一些有意思的可以一起研究下。