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

标签 javascript arrays

这是一个来自 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/

相关文章:

javascript - 外部 ui-grid-menu-button?

javascript - JSLint:如何将代码标记为错误

javascript - jQuery 缓和问题

php - 使用PHP的“注意: undefined variable ”,“注意: undefined index ”和“注意: undefined offset ”

c - 为什么当我向数组添加第七个字符时,我的代码会终止?

javascript - 无法一一访问下面的结构?

ruby-on-rails - will_paginate 列表中每个项目的正确编号?

PHP数组foreach

javascript - 执行通过ajax加载的内联js

javascript - 照片未显示在组件中