前端面试题:if 内的打印结果是多少?

27 阅读1分钟
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 由于等号两边数据类型不一致,会触发隐式类型转换

  1. 如果两个值的类型相同,则直接进行比较 比如

    • 两个字符串根据字符进行比较
    • 两个数值进行数值比较
  2. 如果一个值是null,另一个值是undefined,则直接返回true

  3. 如果一个值是数字,另一个值是字符串

    • 尝试将字符串转为数字,然后进行比较
  4. 如果其中一个值是布尔值

    • 如果为true,转换为数字1
    • 如果为false,转换为数字0
    • 然后进行比较
  5. 如果一个值是对象,另一个值是数字或者字符串或者布尔值

    • 尝试转换对象为原始值,然后比较
    • 先尝试调用对象的valueOf方法
    • 如果valueOf返回的不是原始值,则再尝试调用toString的方法

arr.valueOf()返回仍然是一个数组,不是原始类型,因此会调用arr.toString()='0',数组的toString方法会调用join()尝试把数组内的元素拼接起来

'0'==true //false