[]==![] true[]==false true对象的布尔值不是true吗?为何这里==flase还是true?数组是对象类型,对象不等于对象,即使两个都是空的,这样去理解第一个正确吗?
1 回答
![?](http://img1.sycdn.imooc.com/5458502c00012d4a02200220-100-100.jpg)
慕桂英546537
TA贡献1848条经验 获得超10个赞
之前写得比较简单,再补充点,如果有错误请指正。
说说我的理解吧
首先要明白==
和===
的区别==
是判断值是否相等,===
判断值及类型是否完全相等。
前者会自动转换类型,后者不会。所以在判断[]==![]
会转换两者的类型。
typeof [] //Objecttypeof ![] //Boolean
两者类型不同,比较的时候会尝试将Boolean转换为Number,而Object转换成Number或String,取决于另外一个对比量的类型。这里因为比较的对象是Boolean,所以也会转化为Number。
console.log(![]) //false 因为任何对象Boolean值都为true,所以![]就为false
Boolean与Number的转换,true为1,false为0,所以![]
在比较的时候转换为Number值为0。
而[]
是很明显的空对象了。
对于对象,当将其转换成Number时,会先调用对象的valueOf()方法及toString(),返回对象的原始值,再进行转换。最终[]
会返回""
空字符串,""
会转化Number值为0。
最后0==0所以两者以比较就为true了
添加回答
举报
0/150
提交
取消