空数组的判断问题([]==false)

先抛出两个问题:
1.[]==false 是否成立
2.if([]){ console.log('123') } 能否打印

结果:其实第一个是成立的,第二个也是能打印的,那么问题来了,既然空数组等于false成立,为什么还能执行if里的语句呢?

要解答这个看似矛盾的问题,需要从相等操作符和if语句的条件表达式说起

相等操作符比较规则
1.如果有个操作数是布尔值,则在比较相等性之前,先将其转为数值,false->0,true->1
2.如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前,先将字符串转为数值
3.如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型值按照前面的规则进行比较
4.null和undefined是相等的,且在比较之前不能将其转换为其他任何值
5.如果一个操作数是NaN,则相等操作符返回false,注意NaN不等于NaN
6.如果两个操作数都是对象,则比较它们是不是同一对象,如果两个操作数都指向同一个对象,则相等操作符返回true,否则返回false
额外点:===仅比较而不转换
第一个问题可以用以上的3和1来解答

[].valueOf()   //返回数组对象本身
Number(false)    //0
Number([].valueOf())   //0

if语句的条件表达式,js会自动调用Boolean()将条件表达式转换为布尔值

Boolean([])   //true    故第二个问题可以打印

对于任何不是null的对象,Boolean()都可将其转换为true
那么再抛一个问题:
if(-1){ console.log('123') } 会打印吗
其实同样会打印
注意:对于数字类型的值,除了0和NaN,Boolean()都可将其转换为true

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容