为什么 []==false 的结果是true,({})==true 或者false的结果都为false...
[]和{}是true的话,那么 []==true 或者 ({})==true的结果应该是true。可是事实却不是的,所以判断一个参数是否存在或者参数值是否相等怎么保证没有失误呢?到底什么时候该用 == 什么时候该用 === ?
为什么 []==false 的结果是true,({})==true 或者false的结果都为false...
[]和{}是true的话,那么 []==true 或者 ({})==true的结果应该是true。可是事实却不是的,所以判断一个参数是否存在或者参数值是否相等怎么保证没有失误呢?到底什么时候该用 == 什么时候该用 === ?
这个就是对象的隐式转换。
所有的对象(array, object, function等)经过Boolean转换都会变成true,所以[] ? 1 : 2
就相当于true ? 1 : 2
,if({[]){...}
同理。对象同数组。
对象进行运算时(包括与非对象进行==
判断),会先运行toString方法,进行类型转换,再进行运算。
[]
运行toString是空字符串,'' == false // true
{}
运行toString是字符串[object Object]
'[object Object]' == false // false;
'[object Object]' == true // false;
修改下对象的toString方法,就可以很好的验证
var a = {}
a.toString = function(){
console.log('tostring');
return ''
}
a == false; //tostring true
a === ''; //false //这里没有运行toString
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答5.2k 阅读✓ 已解决
1 回答3.4k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
建议看下类型转化
1.
[]
会转数字为0
布尔值就是false
2.
{}
会转数字为NaN
布尔值就是true