我只是想知道为什么无法在undefined数组上进行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];
然后在其上争取。
我试图使数组具有指定的大小并循环通过它,避免for循环。我认为使用forEach比for循环更清晰。对于长度为5的数组,这不是问题,但是对于较大的数组,这将是丑陋的。
for
为什么遍历未定义值的数组存在问题?
Array(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都设置为undefined 。
length ===2