如果([] == 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
因此,真值 [] 被保留。
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP