一句话理解
==比较先把两侧的值转化为基本数据类型
也就是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
差不多就这些吧,谁再看到一些有意思的可以一起研究下。