如果([] == false) 为真,为什么 ([] || true) 会返回 []? - JavaScript


如果我们仔细观察问题陈述,([] == false) 和 ([] || true) 之间的区别如下:

在第一种情况下,我们使用松散条件检查,允许类型强制转换接管。

而在第二种情况下,我们正在评估 [] 到其相应的布尔值(真值或假值),它使用 Boolean() 函数而不是钩子下的类型强制转换。

现在让我们揭开这两种情况下幕后发生的转换。

案例 1 − ([] == false)

根据 MDN 文档,如果两种数据类型(例如 x 和 y)使用松散相等运算符(==)进行比较,则:

布尔值将使用 Number() 函数转换为数字:

因此,条件现在变为:

[] == 0// Number(false) = 0

然后,如果对象类型的变量将转换为原始值:

"" == 0

最后,空字符串将转换为数字:

0 == 0

以上最终返回 true

案例 2 − ([] || true)

在这种情况下,[] 的真值/假值将通过使用内置的 Boolean() 函数将其转换为布尔值来检查。并且,

Boolean([]) = true

因此,真值 [] 被保留。

更新于: 2020年9月18日

440 次查看

开启你的 职业生涯

完成课程获得认证

开始学习
广告

© . All rights reserved.