以前写代码,想判断是否是空数组的时候,常常写if([]),结果程序怎么都调不通。现在就来说说这个新手常常会感到困惑的问题。
在浏览器中运行如下代码:1
2
3
4if([]){
console.log('abc')
// abc
}
我们会发现if([])是作为true,这个问题要说深了很复杂,我抛砖引玉谈谈自己的看法。
下面我们来看这样一行代码1
typeof([]) // object(惊不惊喜意不意外,不是array是object)----这里为啥是object之后再说,先用这个结论
根据MDN Truthy,JS除了true,false的概念还有truthy falsy的概念—- 在JavaScript中,Truthy(真值)指的是在Boolean上下文中转换后的值为真的值。所有值都是真值,除非它们被定义为 falsy (即, 除了false,0,“”,null,undefined和NaN 外)。
JavaScript 在Boolean上下文中使用强制类型转换,这里的object会被转化为true。
这也就是为什么if[]为true.
在实际运用中 我们只需要记得“假值”只有6个,false,0,“”,null,undefined和NaN
引申说一下: 如果细心可以发现 这行代码是false [] == true 发生这个现象的原因是,[]==true不发生自动类型转换,只比较值是否相等,所以这里是false.
如果初入前端,最好不要使用’==’进行判断,使用’===’。 ‘==’会进行类型转换,不注意出错程序出了Bug会非常难调。
最后附上一个表格,记录了’==’,’===’,’if’判断的true false.
https://dorey.github.io/JavaScript-Equality-Table/
感谢阅读!