空数组为真,但它们也等于假。
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??");
我猜这是由于相等运算符操作的隐式转换。
谁能解释一下幕后发生了什么?
原文由 Patonza 发布,翻译遵循 CC BY-SA 4.0 许可协议
你在这里测试不同的东西。
if (arr)
在对象上调用(数组是JS中对象的实例)将检查对象是否存在,并返回真/假。当您调用
if (arr == false)
时,您比较此对象的 值 和原语false
值。在内部,arr.toString()
被调用,它返回一个空字符串""
。这是因为
toString
调用 Array 返回Array.join()
,而空字符串是 JavaScript 中的虚假值之一。