forEach with uninitialized array

时间:2016-04-16 05:23:41

标签: javascript arrays foreach iteration

具有未初始化值e.g. new Array(100)的数组不会与forEach进行迭代。长度是正确的。使用[undefined,undefined,...]创建一个按预期迭代的数组,但创建一个[,,,,,]的数组不会。

我想知道是否有人可以向我解释这一点。



var array = new Array(100),
    msg;

_init();

console.log("Array length:",array.length);

// forEach is skipped
a = ["forEach:"];
(array).forEach(function(i){
  a.push(i);
});
console.log(a.join(','));


// forEach is also skipped
a = ["forEach array without undefined:"];
([,,,]).forEach(function(i){
  a.push(i);
});
console.log(a.join(','));

// forEach is displayed
a = ["forEach normal array:"];
([undefined,undefined,undefined,undefined]).forEach(function(v,i){
  a.push(v);
});
console.log(a.join(','));

// for is displayed
a = ["for:"]
for(var i=0;i<array.length;i++){
  a.push(i);
}
console.log(a.join(','));

// array.join is displayed (even the ough the values are empty)
a = ["join:"]
a = a.concat(array)
console.log(a.join(','));

// log to target div (ignore this)
function _init(){
  console = {log:targetlog};
}
function targetlog(){
  var args = Array.prototype.slice.apply(arguments);
  $("#target").append("<div>" + args.join(" ") + "</div>")
}
&#13;
span {
  outline:1px solid gainsboro;
  margin:2px;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="target"></div>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:2)

  

我想知道是否有人可以向我解释这一点。

这是规范。

forEach及其弟兄们不理会&#34;漏洞&#34;在稀疏数组中。有关详细信息,请参阅this blog post

来自MDN

  

forEach()为数组中存在的每个元素执行一次提供的回调

spec说同样的话。