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