1); -6ren">
gpt4 book ai didi

javascript - "Array(n)"和 "[...Array(n)]"有什么区别?

转载 作者:行者123 更新时间:2023-11-29 16:05:24 25 4
gpt4 key购买 nike

两者有什么区别?

// Chrome console

Array(2); // [undefined × 2]
Array(2).map(() => 1); // [undefined × 2]

[...Array(2)]; // [undefined, undefined]
[...Array(2)].map(() => 1); // [1, 1]

基于 What are Array empty slots? ,好像跟内存分配有关,但是为什么后一种情况下展开运算符会突然导致分配内存呢?

最佳答案

关于数组构造函数

所有这些调用都是等价的:

  • 数组(2)
  • 新数组(2)
  • var a = []; a.length = 2

从某种意义上说,它们是相等的,它们为分配分配内存,但不创建索引。

Object.keys(Array(2))//[]

这就是为什么当你这样做的时候

Array(2).map(() => 1);//[未定义 × 2]

您基本上什么都没有改变,因为没有迭代发生在数组上,因为缺少 map 在迭代数组时使用的迭代索引键。

关于点差运算符

... 运算符调用数组的 [Symbol.iterator],该数组是内置的 values() 迭代器并迭代即使没有关键索引的值。

这就是为什么在结果中我们有一个新数组,其中包含不同的未定义值和适当的键索引。

Object.keys([...Array(2)])//["0", "1"]

之后 map 会按预期迭代键和相应的值。

关于javascript - "Array(n)"和 "[...Array(n)]"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44247965/

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