1

http://jsperf.com/testing-for-empty-array

我想知道在 JavaScript 中测试空数组的最佳方法是什么,并发现了一些奇怪的结果。据我所知,您永远不应该使用以下方法进行测试:

if (arr == true)
  // do stuff

我认为被解释为与:

if (arr)
  // do stuff

arr == true使用速度明显变慢是有原因的吗?

4

2 回答 2

2

测试数组是否为空的唯一好方法是使用arr.length.

让我们看看不同的情况。

  1. if(arr === true)将始终为假,因为数组不是布尔值。

    if(arr !== false && arr !== true)出于同样的原因将返回 true!

  2. if(arr)将返回真或假,这取决于是否设置了数组。如果var arr = [],它将返回 true,但它是一个空数组。

    事实上,即使 var 不是数组,它也会返回 true。

  3. if(arr[0])如果索引为 0 的单元格中有一个值,将返回 true。即使存在,也不意味着它是空的,因为您可以设置这样的单元格,var arr=[]; arr[1] = 'value'并且arr[0]将返回 false,因为它没有设置,但数组有一个长度2 个(一个单元格)。

最后,查看数组是否为空的最佳方法是:if(arr && arr.length)

如果您知道您已经创建了数组,则不需要检查是否arr存在,否则,它将防止任何错误。然后,您检查数组的长度,如果您没有像 : 那样更改值arr.length = 1000,它会告诉您数组是否为空。

于 2013-07-07T03:50:29.933 回答
2

它必须首先将数组转换为空字符串,然后从那里转换为布尔值以进行比较true,因为您不能直接将数组与布尔值进行比较。铸造很昂贵。

于 2013-07-07T03:32:30.547 回答