空数组的真值和与假相等的混淆
在 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在对象或条件上下文中使用时呈现并评估为 true。然而,当与原始值 false 相比时,由于相等运算执行的隐式类型转换,它们的计算结果为 false。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3