空数组的真值和与假相等的混淆
在 JavaScript 中,空数组被认为是真值。但是,与原始值 false 相比,它们的计算结果也为 false。这种令人困惑的行为可以归因于相等运算符执行的隐式类型转换。
让我们仔细看看提供的示例代码:
var arr = []; console.log('Array:', arr); if (arr) console.log("It's true!"); if (arr == false) console.log("It's false!"); if (arr && arr == false) console.log("...what??");
第一个 if 语句检查 arr 是否为存在(因为它是一个对象)。由于 arr 是一个 Array 对象,因此它存在并且条件计算结果为 true。
但是,第二个 if 语句将 arr 的值(调用 toString() 后)与原始值 false 进行比较。在 JavaScript 中,当使用 toString() 调用时,[] 会转换为空字符串 (""),这被视为假值(以及 null、undefined、0 等)。因此,该条件的计算结果也为 false。
第三个 if 语句使用 AND 运算符 (&&) 组合了前两个条件。由于 arr (现在是空字符串)和 arr == false (true & false) 的计算结果均为 false,因此整个条件的计算结果为 false。
总之,空数组在被认为是真实的意义上是真实的在对象或条件上下文中使用时呈现并评估为 true。然而,当与原始值 false 相比时,由于相等运算执行的隐式类型转换,它们的计算结果为 false。
以上是为什么 JavaScript 中空数组的计算结果既为真又为假?的详细内容。更多信息请关注PHP中文网其他相关文章!