我遇到了一些我以前从未见过的东西,我喜欢它。检查以下示例:
var arr = ['un', 'deux', 'trois', 'quatre', 'cinq', 'six', 'sept'];
for(var i = 0; arr[i]; i++){
console.log( arr[i] );
}
而不是:
for(var i = 0; i < arr.length; i++){
console.log( arr[i] );
}
但是它们都实现了相同的结果,即输出数组列表。
我的问题是,在 for loop 声明中使用'arr [i]'和'arr.length'之间有什么区别(或相似性)?
非常感谢
答案 0 :(得分:11)
var arr = ['un', 'deux', 'trois', null, 'cinq', 'six', 'sept'];
现在怎么样?
delete arr[2];
现在怎么样?
只要数组中有伪值或键中的不连续(例如使用delete
运算符创建的值),差异就会显示出来。 length
循环将产生假值并继续,另一个将停止。
答案 1 :(得分:2)
i < arr.length
如果i
小于arr
的长度,则此语句会检查每个循环
arr[i]
此处,每个循环周期都会检查位置 arr
的{{1}}是否真实。
答案 2 :(得分:2)
我们问问jsperf.com http://jsperf.com/arr-i-vs-arrlength/2
答案 3 :(得分:1)
使用arr[i]
作为continue条件检查数组中该位置元素的真实性。这是一个可爱的技巧,但如果你想迭代包含虚假值的数组,如
[1, 4, 6, 0, 3, 9]
// or
[true, 'seven', false, -1, {foo: 'bar'}]
使用i < arr.length
检查当前索引是否小于数组的总长度。
答案 4 :(得分:1)
只要条件部分为真,for循环就会迭代。第一次条件为假时,循环停止。
只要值不以下之一, arr[i]
为真:false,0,空字符串,null,undefined,NaN
i < arr.length
检查i
是否小于数组的大小,这是你应该做的。