MST

星途 面试题库

面试题:JavaScript隐式转换 - 复杂场景分析

分析以下代码输出结果及背后的隐式转换过程:`if ([] == false) { console.log('true'); } else { console.log('false'); }`。请详细说明每个操作数如何进行类型转换以及比较的依据。
36.4万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. 输出结果
    • 输出 true
  2. 隐式转换过程
    • [] == false 这个比较中:
      • 首先,== 操作符在比较时,如果两个操作数类型不同,会进行隐式类型转换。
      • 对于 [](空数组),当它与布尔值 false 比较时,会遵循以下转换规则:
        • 数组会先尝试转换为原始值。根据 JavaScript 规范,数组转换为原始值时,会调用 valueOf() 方法和 toString() 方法。[] 调用 valueOf() 方法返回的还是数组本身 [],不满足原始值要求,于是继续调用 toString() 方法,[] 调用 toString() 方法返回空字符串 ''
        • 布尔值 false 在与其他类型比较时,会转换为数字 0
        • 此时比较变成了 '' == 0
        • 空字符串 '' 会转换为数字 0(这是 JavaScript 字符串转数字的规则,空字符串转数字为 0)。
        • 最终比较变成了 0 == 0,这个比较结果为 true,所以 if 条件成立,输出 true