空数组为true,但也等于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) 在对象上调用(数组是JS中Object的实例)将检查对象是否存在,并返回true / false。
if (arr)
当你打电话if (arr == false)你比较 值 这个对象和原始的false价值。在内部arr.toString()被调用,它返回一个空字符串""。
if (arr == false)
false
arr.toString()
""
这是因为toString在Array上调用会返回Array.join(),并且空字符串是JavaScript中的虚假值之一。
toString
Array.join()