http://jsperf.com/testing-for-empty-array
我想知道在 JavaScript 中测试空数组的最佳方法是什么,并发现了一些奇怪的结果。据我所知,您永远不应该使用以下方法进行测试:
if (arr == true)
// do stuff
我认为被解释为与:
if (arr)
// do stuff
arr == true
使用速度明显变慢是有原因的吗?
http://jsperf.com/testing-for-empty-array
我想知道在 JavaScript 中测试空数组的最佳方法是什么,并发现了一些奇怪的结果。据我所知,您永远不应该使用以下方法进行测试:
if (arr == true)
// do stuff
我认为被解释为与:
if (arr)
// do stuff
arr == true
使用速度明显变慢是有原因的吗?
测试数组是否为空的唯一好方法是使用arr.length
.
让我们看看不同的情况。
if(arr === true)
将始终为假,因为数组不是布尔值。
if(arr !== false && arr !== true)
出于同样的原因将返回 true!
if(arr)
将返回真或假,这取决于是否设置了数组。如果var arr = []
,它将返回 true,但它是一个空数组。
事实上,即使 var 不是数组,它也会返回 true。
if(arr[0])
如果索引为 0 的单元格中有一个值,将返回 true。即使存在,也不意味着它是空的,因为您可以设置这样的单元格,var arr=[]; arr[1] = 'value'
并且arr[0]
将返回 false,因为它没有设置,但数组有一个长度2 个(一个单元格)。
最后,查看数组是否为空的最佳方法是:if(arr && arr.length)
。
如果您知道您已经创建了数组,则不需要检查是否arr
存在,否则,它将防止任何错误。然后,您检查数组的长度,如果您没有像 : 那样更改值arr.length = 1000
,它会告诉您数组是否为空。
它必须首先将数组转换为空字符串,然后从那里转换为布尔值以进行比较true
,因为您不能直接将数组与布尔值进行比较。铸造很昂贵。