使用arr [i]!== undefined循环遍历数组

时间:2015-03-23 17:49:34

标签: javascript arrays loops for-loop foreach

我知道循环数组arr的经典方法是:

for(var i=0 ; i<arr.length ; i++) {
    // code
}

但最近有人向我展示了在该循环中实现条件的不同方法,如下所示:

for(var i=0 ; arr[i] !== undefined ; i++) {

我认为这个解决方案很有意思,因为这正是您在循环数组时所需要的:当您尝试访问未定义的索引时,您不想获得undefined

我意识到,如果你计算它看起来更长的字符,并且你可能会遇到像这样的数组有问题:["Hello", , "World"],但除此之外 - 还有什么我在这里缺少的?为什么我们不应该使用这种技术呢?

2 个答案:

答案 0 :(得分:3)

  

为什么我们不应该使用这种技术呢?

  • 它不适用于稀疏数组(正如您所提到的)
  • 它不适用于包含undefined值的数组
  • 不容易优化(假设.length在循环期间保持不变)
  • (过去the undefined identifier could be overwritten,您需要使用typeof

cource,它是&#34;工作&#34;对于你取决于用例,有时你可能想要使用它。大多数情况下,你根本就没有。

即使两种方式都适用于您的情况,使用标准方法(i<arr.length)也是一种更好的做法,因为心理开销较低。每个人都认识到这种模式并知道它的作用,而arr[i]!==undefined时,人们需要思考为什么选择这种不常见的方法。

答案 1 :(得分:1)

有时数组的值为空,您的迭代方式也会失败。

var arr = [];
arr[5] = 5;

for (var i = 0; arr[i] !== undefined; ++i) {
    console.log(arr[i]);
}

console.log('done');

如果你想迭代实数组值并跳过undefined,我建议你先过滤数组,然后再进行迭代。所以你的代码会更容易理解。示例:

var arr = [];
arr[5] = 5;

arr.filter(Boolean).forEach(function (e) {
  console.log(e);
});

console.log('done');