javascript - forEach 在 Array 构造函数创建的未定义数组上

标签 javascript arrays foreach 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];

然后在上面做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/

相关文章:

Java foreach NoSuchElementException

javascript - Chrome 在 window.history.back() 上强制刷新页面

javascript - 将文本从一个 div 移动到另一个 div,同时更改其背景颜色、字体和文本颜色

javascript - 如何使用 es6 将对象组合并传输到类的数组

java - 我无法正确打印我的卡片对象

javascript - 如何在javascript中创建一个对象的foreach?

javascript - 用于命名变量和函数的单个字母

javascript - 如何将键值对映射到对象中的每个索引

javascript - 追加到由 ul 制成的数组

c# - 我怎么知道我是否在迭代集合的最后一项?