如果空数组在JavaScript中[]是假的,那么为什么当用作三元运算符中的谓词时,运算符会逃避第一个选项?
console.log([] == false); // prints true
console.log([] ? 0 : 1); // prints 0 !
Run Code Online (Sandbox Code Playgroud)
SRe*_*ect 14
首先,空数组不是假的,要获得实际的布尔值前缀,!!例如:console.log(!![]) // true
你从第一次比较得到的结果是由于强制.当通过==操作数进行左对比比较时,JavaScript会尝试将输入强制转换为公共类型,如下所示:
Boolean如此,它被转换为一个Number值,导致比较[] == 0.Object它被转换为原始; 在这种情况下是一个String通道[].toString(),导致比较"" == 0.String,它将转换为number导致的值0 == 0.Number原始的,因此将它们的值进行比较,从而产生真实的条件使用第二个表达式,没有比较的右手,所以它只是测试输入是否真实.所述阵列并不null,undefined,0,""或NaN,因此,它是truthy.
要强制在两个输入之间进行非强制比较,您应该使用===操作数.