我只是想知道为什么不能在未定义的数组上创建 forEach。
代码:
var arr = new Array(5); // [undefined x 5]
//ES5 forEach
arr.forEach(function(elem, index, array) {
console.log(index);
});
//underscore each
_.each(arr, function(elem, index, array) {
console.log(index);
});
两个例子都不执行函数。
现在要制作 foreach,我必须制作:
var arr = [0,0,0,0,0];
然后在上面做forEach。
我正在尝试创建一个具有指定大小的数组并循环遍历它,避免 for
循环。我认为使用 forEach 比使用 for 循环更清楚。
对于长度为 5 的数组,这不是问题,但对于更大的数组,它会很丑陋。
为什么遍历未定义值的数组会出现问题?
最佳答案
Array(5)
本质上等同于
var arr = [];
arr.length = 5;
在 javascript 中,更改数组的长度不会为其数字属性设置任何值,也不会在数组对象中定义这些属性。所以数字属性是未定义的,而不是具有未定义的值。您可以使用以下方法检查它:
Object.keys(arr)
当迭代 javascript 迭代数组的数值属性时,如果这些属性不存在,就没有什么可以迭代的。
您可以通过以下方式检查它:
var arr = Array(5)
//prints nothing
arr.forEach(function(elem, index, array) {
console.log(index);
});
arr[3] = 'hey'
//prints only 'hey' even though arr.length === 5
arr.forEach(function(elem, index, array) {
console.log(index);
});
以下代码:
var arr = [undefined, undefined];
创建 length ===2
的数组并将数字属性 0 和 1 设置为未定义。
关于javascript - forEach 在 Array 构造函数创建的未定义数组上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23460301/