日常开发中关于类型转换的思考

2020-06-14  本文已影响0人  易冷zzz

问题背景:

//问题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

总结:[]转换为Number0; 转换为布尔值为true;转换为字符串为""

关于==的比较参考如下规则:
如果两个值的类型相同进行 ===比较
如果两个值得类型不同,先根据下面的规则进行类型转换后再比较:
1.如果一个是null另一个是undefined,那么相等
2.如果一个是数值一个是字符串,则字符串转换为数值再比较
3.如果其中一个为true则转化为1false则转化为0进行比较
4.如果一个是对象另一个是数值或者字符串,把对象转为基础类型的值再比较。对象转基础类型利用toString或者valueOf方法,js核心内置类会尝试valueOf优先于toString,但是Date对象利用toString转换。
5.不属于以上几种情况的其他组合都不相等。

具体可参考MDN JavaScript 中的相等性判断

关于if条件转化为布尔值的规则:

如果逻辑对象无初始值或者其值为 0、-0、null、""、false、undefined 或者 NaN,那么对象的值为 false。否则,其值为 true

上一篇 下一篇

猜你喜欢

热点阅读