在我的网站上工作时,我无意中偶然发现了以下数组行为,我无法真正解决这个问题。
如果我在我的剧本中写这样的东西:
Array(4).forEach(function(elem) {console.log(elem);});
我没有返回任何日志条目,也没有返回任何内容。
相反,如果我写这个:
[undefined,undefined,undefined,undefined].forEach(function(elem) {console.log(elem);});
我确实得到了4个日志条目。
我的问题是 ,这是为什么?为什么我不能获取数组构造函数的日志条目,而是使用[]
获取它们? constructor specification 和 forEach
specification 都没有真正逃到undefined
或帮助我理解这一点。
答案 0 :(得分:2)
forEach()
按升序为数组中的每个元素 present 执行一次提供的回调。对于已删除或删除的索引,不会调用它。但是,它是针对存在且值未定义的元素执行的。
初始化数组的方式确实设置了它的长度,但没有将数组中的值设置为任何值,因此forEach
不会迭代这些元素:
如果参数
len
是数字且ToUint32(len)
等于len
,则新构造的对象的length属性设置为ToUint32(len)
。
示例:
var a = Array(5);
a.forEach(function(element){
console.log('First log:', element)
});
a[2] = true;
a[3] = undefined;
a.forEach(function(element){
console.log('Second log:', element)
});
var b = [];
b[999] = 'Foobar';
b.forEach(function(element){
console.log('Third log:', element)
});
正如您在控制台中看到的那样,它只是跳过没有设置值的索引。