var arr = [0]
if (arr) {
console.log(arr==true) //false
} else {
console.log(a)
}
这里会打印false
哪些值转化为布尔类型为false?
1 空字符串 ""
2 数字0
3 NaN
4 null或者undefined
首先arr是一个数组,不属于上面四种类型的任意一种,因此会转为true
arr==true 由于等号两边数据类型不一致,会触发隐式类型转换
-
如果两个值的类型相同,则直接进行比较 比如
- 两个字符串根据字符进行比较
- 两个数值进行数值比较
-
如果一个值是null,另一个值是undefined,则直接返回true
-
如果一个值是数字,另一个值是字符串
- 尝试将字符串转为数字,然后进行比较
-
如果其中一个值是布尔值
- 如果为true,转换为数字1
- 如果为false,转换为数字0
- 然后进行比较
-
如果一个值是对象,另一个值是数字或者字符串或者布尔值
- 尝试转换对象为原始值,然后比较
- 先尝试调用对象的valueOf方法
- 如果valueOf返回的不是原始值,则再尝试调用toString的方法
arr.valueOf()返回仍然是一个数组,不是原始类型,因此会调用arr.toString()='0',数组的toString方法会调用join()尝试把数组内的元素拼接起来
'0'==true //false