<分区>
如果空数组[]
是falsy在 JavaScript 中,为什么在三元运算符中用作谓词时,运算符求值为第一个选项?
console.log([] == false); // prints true
console.log([] ? 0 : 1); // prints 0 !
标签 javascript arrays
<分区>
如果空数组[]
是falsy在 JavaScript 中,为什么在三元运算符中用作谓词时,运算符求值为第一个选项?
console.log([] == false); // prints true
console.log([] ? 0 : 1); // prints 0 !
最佳答案
数组不是假的;这可以使用 console.log(!![])
来证明
通过 ==
进行左右比较时操作数 JavaScript 尝试将输入强制转换为通用类型。
用你的第一个例子 [] == false
,会发生以下情况:
Boolean
所以它被转换为 Number
值,导致比较结果为 [] == 0
.Object
它被转换为原语;在这种情况下 String
通过[].toString()
,导致比较结果为 "" == 0
.String
, 它被转换为 number
产生 0 == 0
的值.Number
基元,比较它们的值,从而产生真实条件用第二个例子[] ? 0 : 1
,没有右边的值可以比较,所以它只是测试输入是否为真。该数组不是 undefined
, null
, 0
, ""
或 NaN
,因此它被视为真实的,因此返回“真”选项:0
;
要在两个输入之间强制进行非强制比较,您应该使用 ===
操作数。
Ecma Standard 6th edition Entry on Coercion
JS Coercion Explained
关于javascript - 空数组是假的,但是 [] ? 0 : 1 evaluates to 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33567147/