javascript - 为什么带有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]
解决方案
有些人可能会认为这是我在评论中提到的帖子的复制品。要点是数组构造函数创建一个未定义引用的数组,扩展运算符创建一个未定义引用的数组。
map
跳过未定义的引用,但愉快地将引用映射到未定义。看到它有 console.log()
副作用。
new Array(3).map(el => console.log('this code is never reached'))
与此相比
[...new Array(3)].map(el => console.log(el))
推荐阅读
- python - Django:如何通过删除每个值前面的 Decimal( 来从查询中获取干净的数据?
- javafx - 在 java fx 中找不到 CSS 样式表
- python - 格式化日期时间对象
- python - 您如何在 while 循环中进行“回溯”?
- arrays - BASH:如何调用文本列表文件中的数据之一并将其分配给变量
- c# - 如何在 LinQ 中映射单个对象而不是 IEnumerable
- apache-spark - 如何以编程方式获取有关 PySpark 中执行程序的信息
- amazon-web-services - AWS Polly - 如何减少字符限制?
- amazon-web-services - Amazon AWS Lightsail + Cloudflare - 名称服务器更新?
- javascript - expo 弹出错误 - 系统找不到指定的路径