{} [] 0 1 的 if 或者二目运算符的判断使用

为什么 []==false 的结果是true,({})==true 或者false的结果都为false...
[]和{}是true的话,那么 []==true 或者 ({})==true的结果应该是true。可是事实却不是的,所以判断一个参数是否存在或者参数值是否相等怎么保证没有失误呢?到底什么时候该用 == 什么时候该用 === ?

image.png

阅读 1.6k
2 个回答

建议看下类型转化

1.[]会转数字为0布尔值就是false
2.{}会转数字为NaN布尔值就是true

这个就是对象的隐式转换。

所有的对象(array, object, function等)经过Boolean转换都会变成true,所以[] ? 1 : 2就相当于true ? 1 : 2if({[]){...}同理。对象同数组。

对象进行运算时(包括与非对象进行==判断),会先运行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
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题