gpt4 book ai didi

javascript - 为什么我不能使用 array == [] 检查数组是否为空?

转载 作者:数据小太阳 更新时间:2023-10-29 05:17:42 25 4
gpt4 key购买 nike

这是一个来自 CodeWars 的问题,名为“Count of positives/sum of negatives”。它说:

If the input array is empty or null, return an empty array

为了检查数组是否为空,我决定检查它是否为空数组。当我尝试这样做时:

if(input == [])

我没有通过测试,但如果我通过了:

if(input.length == 0)

我通过了测试。空数组应该等于 [] 对吗?为什么会有差异,这两种检查有什么区别?

我的代码如下:

function countPositivesSumNegatives(input) {
var a = 0;
var b = 0;
if (input == null) {
return []
}
if (input.length == 0) {
return []
}
for (var i = 0; i < input.length; i++) {
if (input[i] > 0) {
a++;
}
if (input[i] < 0) {
b += input[i];
}
}
return [a, b]
}

最佳答案

问题是数组是对象。当您比较两个对象时,您比较的是它们的引用。每the MDN documentation :

Equality (==)

If both operands are objects, then JavaScript compares internal references which are equal when operands refer to the same object in memory.

由于数组的两个实例不一定具有相同的引用,因此检查失败。只需在控制台中试试这个:

> [] == []
false

看似内容相同(或内容不相同)的两个数组并不相等。那是因为内容不是检查的,而是引用的。这两个数组是不同的实例并且引用内存中的不同位置,因此检查结果为 false。

另一方面,只检查长度,如果长度为零,则检查数组是否为空。 length 属性表示数组1 中的内容量,并且是每个数组的一部分。由于它是每个数组的一部分并反射(reflect)了数组中的数据量,因此您可以使用它来检查数组是否为空。


1 不过要注意 sparse arraysRobG所述在评论中。可以使用 new Array(N) 创建此类数组,这将为您提供一个空数组,但长度为 N。

关于javascript - 为什么我不能使用 array == [] 检查数组是否为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44381669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com