这是一个来自 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 arrays如RobG所述在评论中。可以使用 new Array(N)
创建此类数组,这将为您提供一个空数组,但长度为 N。
关于javascript - 为什么我不能使用 array == [] 检查数组是否为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44381669/