Javascript arr.forEach未产生预期结果

Javascript arr.forEach未产生预期结果,javascript,Javascript,我试图用每个元素的索引填充使用Array(5)创建的数组: 让arr=Array(5) arr.forEach((项目,索引)=>arr[index]=索引) 控制台日志(arr) //预期产出: // [0, 1, 2, 3, 4] //相反,我得到了 // [ //未定义, //未定义, //未定义, //未定义, //未定义 //]您需要用函数填充它 该数组实际上是空的,因此forEach不会迭代 阵列长度 如果传递给数组构造函数的唯一参数是一个介于0和232-1(包括0和232-1)之

我试图用每个元素的索引填充使用
Array(5)
创建的数组:

让arr=Array(5)
arr.forEach((项目,索引)=>arr[index]=索引)
控制台日志(arr)
//预期产出:
// [0, 1, 2, 3, 4]
//相反,我得到了
// [
//未定义,
//未定义,
//未定义,
//未定义,
//未定义

//]
您需要用函数填充它

该数组实际上是空的,因此
forEach
不会迭代

阵列长度

如果传递给数组构造函数的唯一参数是一个介于0和232-1(包括0和232-1)之间的整数,则返回一个新的JavaScript数组,其长度属性设置为该数字(注意:这意味着数组的arrayLength空插槽,而不是具有实际未定义值的插槽)。如果参数是任何其他数字,则会引发RangeError异常

让arr=Array(5.fill();
arr.forEach((项,索引)=>{arr[index]=index})

控制台日志(arr)您需要用函数填充它

该数组实际上是空的,因此
forEach
不会迭代

阵列长度

如果传递给数组构造函数的唯一参数是一个介于0和232-1(包括0和232-1)之间的整数,则返回一个新的JavaScript数组,其长度属性设置为该数字(注意:这意味着数组的arrayLength空插槽,而不是具有实际未定义值的插槽)。如果参数是任何其他数字,则会引发RangeError异常

让arr=Array(5.fill();
arr.forEach((项,索引)=>{arr[index]=index})

控制台日志(arr)所以实际上可以有一个长度可调但没有索引的数组?这对我来说没有多大意义,只有当你这么做的时候才会发生。如果你说
新数组(3,5)你会得到
[3,5]
。此外,不需要以这种方式构造数组,您不必像在C中那样提前指定长度。您可以始终只执行
Array.apply(null,Array(5))
,它将按预期工作。因此,实际上可以使用长度可调但没有索引的数组?这对我来说没有多大意义,只有当你这么做的时候才会发生。如果你说
新数组(3,5)你会得到
[3,5]
。此外,不需要以这种方式构造数组,您不必像在C中那样提前指定长度。您可以始终只执行
Array.apply(null,Array(5))
,它将按预期工作。迭代确实发生,但在每次迭代中只有
索引
显然是
未定义的。否则,如何获取包含5个未定义值的数组?当我将第一行更改为
let arr=[…Array(5)]
时,为什么我的代码会起作用?如果将
console.log(…)
放入forEach方法中,您可以看到没有发生交互;未调用该方法。在最初的示例中,您真的得到了“五个未定义的值”吗?我得到了“五个空插槽”,这是不一样的。@connexo看到了更新的答案。呃,不,
[…arr]
不等于
数组。apply(null,arr)
。它与数组相同。但是从(arr)
开始。@Bergi您是对的,将使用
length
属性。但是,apply函数将返回一个包含
n
元素的数组。迭代确实会发生,在每次迭代中,只有
索引
显然是
未定义的
。否则,如何获取包含5个未定义值的数组?当我将第一行更改为
let arr=[…Array(5)]
时,为什么我的代码会起作用?如果将
console.log(…)
放入forEach方法中,您可以看到没有发生交互;未调用该方法。在最初的示例中,您真的得到了“五个未定义的值”吗?我得到了“五个空插槽”,这是不一样的。@connexo看到了更新的答案。呃,不,
[…arr]
不等于
数组。apply(null,arr)
。它与数组相同。但是从(arr)
开始。@Bergi您是对的,将使用
length
属性。但是,apply函数将返回一个包含
n
元素的数组。