将数组与 JavaScript 中的 0 进行比较

Compare an array with 0 in JavaScript

我正在浏览我公司的代码库,发现了一个将数组与 0 进行比较的语句,如下所示:

数组 > 0;

如果我们让array = ["1"],它只有一个元素,上面的说法就成立; 但是如果 let array = ["1", "2"] or [],语句就会变成 false;

谁能解释这个语句的含义,为什么会产生这样的结果,以及它在任何情况下是否有用?

由于您将数组与数字进行比较,JavaScript 会将其转换为数字。您可以通过 Number(value) 手动执行此操作。从我的测试来看,它似乎只是试图将第一个值转换为一个数字。但是,如果有多个索引,则returnsNaN。如果没有值,它 returns 0.

据我所知,这个条件真的没有多大用处。在没有上下文的情况下很难确切地说出它的意思,但我的猜测是这是处理某些边缘情况的奇怪尝试。

当您使用 > 时,引擎将首先 convert both sides to a primitive,这将调用 valueOf,并且,如果 return 不是原语,则toString 方法(如果存在)。对于数组,只有 toString 方法 return 是原语,所以这就是使用的方法 - 它所做的等同于做 .join(',').

console.log(['1', '2'].toString());

Looking at the spec again,在数组变成基本类型后,我们现在有一侧是字符串(来自数组),另一侧是数字。所以,两边都转换成数字:

d. Let nx be ? ToNumeric(px).
e. Let ny be ? ToNumeric(py).

然后比较数字。

['1'] 的情况下,你得到 1 > 0,这是正确的。

['1', '2']的情况下,得到的字符串是'1,2',无法转换为数字,所以运行如下:

h. If nx or ny is NaN, return undefined.

并且当undefined被这个算法return编辑时,整个>评估to false

and if it would be useful in any situation?

对于干净、易于理解的代码,它通常不会。最好显式转换为比较首先具有直观意义的类型。