javascript - 空数组是假的,但是 [] ? 0 : 1 evaluates to 0

标签 javascript arrays

<分区>

如果空数组[]falsy在 JavaScript 中,为什么在三元运算符中用作谓词时,运算符求值为第一个选项?

console.log([] == false); // prints true
console.log([] ? 0 : 1);  // prints 0 !

最佳答案

数组不是假的;这可以使用 console.log(!![]) 来证明

通过 == 进行左右比较时操作数 JavaScript 尝试将输入强制转换为通用类型。

用你的第一个例子 [] == false ,会发生以下情况:

  1. 发现右侧是Boolean所以它被转换为 Number值,导致比较结果为 [] == 0 .
  2. 因为左边是 Object它被转换为原语;在这种情况下 String通过[].toString() ,导致比较结果为 "" == 0 .
  3. 因为左边是 String , 它被转换为 number产生 0 == 0 的值.
  4. 因为双方都是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/

相关文章:

java - 如何在 Java 中初始化对象数组

java - 创建其他类的数组。

javascript - 使用 ng-repeat 时 Flexslider 无法正常工作

javascript - 如何使用 jquery 将列表元素动态对齐到其邻居的高度

javascript - 如何使用 lodash 获取对象的前 n 个元素?

javascript - 当我尝试将变量从 php 传递到 js 时如何解决 "Uncaught SyntaxError: Unexpected identifier"?

Javascript:动态创建引用实例化对象的 html 元素

ios - 在 Objective C 中创建 JSON 数组

jquery 过滤器.not()

Python将多行放入数组