为了账号安全,请及时绑定邮箱和手机立即绑定

由Array构造函数创建的未定义数组上的forEach

由Array构造函数创建的未定义数组上的forEach

蝴蝶不菲 2019-11-04 09:59:37
我只是想知道为什么无法在undefined数组上进行forEach。码:var arr = new Array(5); // [undefined x 5]//ES5 forEacharr.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的数组,这不是问题,但是对于较大的数组,这将是丑陋的。为什么遍历未定义值的数组存在问题?
查看完整描述

2 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

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。


查看完整回答
反对 回复 2019-11-04
  • 2 回答
  • 0 关注
  • 434 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信