MST

星途 面试题库

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

在 JavaScript 中,`[] == false` 返回 `true`,`[] ==![]` 也返回 `true`,请详细解释这两个等式背后完整的隐式类型转换机制,并说明为什么 `[] ===![]` 返回 `false`。
37.4万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. [] == false 背后的隐式类型转换
    • 根据 JavaScript 的抽象相等比较规则(== 操作符),当比较的一方是布尔值时,会将布尔值转换为数字。false 会被转换为 0
    • 当比较的另一方是数组时,数组会先被转换为原始值。空数组 [] 通过 valueOf() 方法返回自身,然后调用 toString() 方法,[]toString() 方法返回空字符串 ''
    • 接着,空字符串 '' 会被转换为数字,空字符串转换为数字时结果为 0
    • 最后比较 0 == 0,结果为 true
  2. [] ==![] 背后的隐式类型转换
    • 首先,![] 会对数组进行布尔值取反。在 JavaScript 中,非空数组会被转换为 true,空数组 [] 会被转换为 false,所以 ![] 结果为 false
    • 此时就变成了 [] == false,后续的类型转换与上述 [] == false 的情况一样,最终结果为 true
  3. 为什么 [] ===![] 返回 false
    • === 操作符是严格相等比较,它不会进行隐式类型转换。
    • [] 是一个数组对象,![] 是布尔值 false
    • 由于它们的类型不同,所以 [] ===![] 返回 false