gpt4 book ai didi

javascript - 在javascript中分配新数组

转载 作者:数据小太阳 更新时间:2023-10-29 04:04:11 25 4
gpt4 key购买 nike

正在尝试为新数组分配值。

案例一:

var x = new Array(3).map(()=>1);

现在 x[undefined * 3]

案例2:

var x = [...new Array(3)].map(()=>1);

现在 x[1,1,1]

有人可以帮忙吗?

为什么使用这个展开运算符会产生如此大的不同?

为什么情况 1 不起作用

最佳答案

tl;dr: 第一个阵列有孔,第二个没有。 .map 跳过漏洞。


通过使用展开元素,数组被视为一个可迭代,即您获得一个迭代器来迭代数组。迭代器基本上像 for 循环一样工作,它将从索引 0 到索引 array.length - 1 迭代数组(参见 the spec有关详细信息),并将每个索引处的值添加到新数组。由于您的数组不包含任何值,array[i] 将为每个索引返回 undefined

这意味着,[...new Array(3)] 生成一个包含三个 undefined 值的数组,而不是仅仅一个“备用”数组长度为 3

查看 Chrome 中的不同之处:

enter image description here

我们称“稀疏数组”也称为“有空洞的数组”。

这里是症结:很多数组方法,包括.mapskip漏洞!他们没有将空洞视为值 undefined,而是完全忽略它。

您可以通过将 console.log 放入 .map 回调中轻松验证:

Array(3).map(() => console.log('call me'));
// no output

这就是您的第一个示例不起作用的原因。您有一个只有空洞的稀疏数组, .map 忽略了它。使用 spread 元素创建一个新数组会创建一个没有空洞的数组,因此 .map 有效。

关于javascript - 在javascript中分配新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37151298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com