首页 > 解决方案 > 为什么带有spread和map的数组会生成一个未定义值的数组

问题描述

有人能解释一下为什么这个语句会生成一个新的空值数组而不是一个 1 的数组吗?

let a = [...Array(3).map(_ => 1)];
console.log(a);

结果[null, null, null]而不是[1,1,1]

但是,下面的代码...

let b = [...Array(3)].map(_ => 1)
console.log(b);

结果[1,1,1]

标签: javascriptarrays

解决方案


有些人可能会认为这是我在评论中提到的帖子的复制品。要点是数组构造函数创建一个未定义引用的数组,扩展运算符创建一个未定义引用的数组。

map跳过未定义的引用,但愉快地将引用映射到未定义。看到它有 console.log()副作用。

new Array(3).map(el => console.log('this code is never reached'))

与此相比

[...new Array(3)].map(el => console.log(el))


推荐阅读