问题背景:
//问题1
console.log([] == false) //true
//问题2
[] ? console.log('111') : console.log('2') //‘111’
以上两行代码在日常开发中非常常见,以此为例那么[]
到底是false
还是true
呢?
简单来说:
[] == fasle //true
//==为比较运算符,两边都需要转换为Number类型 [] => 0 false => 0
[] ? console.log('111') : console.log('2') //‘111’
//此处[]作为判断条件转换为布尔值为false
总结:[]
转换为Number
为0
; 转换为布尔值为true
;转换为字符串为""
。
关于==
的比较参考如下规则:
如果两个值的类型相同进行 ===
比较
如果两个值得类型不同,先根据下面的规则进行类型转换后再比较:
1.如果一个是null
另一个是undefined
,那么相等
2.如果一个是数值一个是字符串,则字符串转换为数值再比较
3.如果其中一个为true
则转化为1
,false
则转化为0进行比较
4.如果一个是对象另一个是数值或者字符串,把对象转为基础类型的值再比较。对象转基础类型利用toString
或者valueOf
方法,js核心内置类会尝试valueOf
优先于toString
,但是Date
对象利用toString
转换。
5.不属于以上几种情况的其他组合都不相等。
具体可参考MDN JavaScript 中的相等性判断
关于if条件转化为布尔值的规则:
如果逻辑对象无初始值或者其值为 0、-0、null、""、false、undefined 或者 NaN,那么对象的值为 false。否则,其值为 true
网友评论