【问题标题】:Why does .map treat Array(x) differently from [...Array(x)]? [closed]为什么 .map 将 Array(x) 与 [...Array(x)] 区别对待? [关闭]
【发布时间】:2021-03-03 00:58:45
【问题描述】:

问题是,Array(5) 和 [...Array(5)] 之间有什么区别见下文变量 c 和 d 是相同的,但 .map 对待它的方式不同。

let a = [...Array(5)].map((k,i)=>{
  console.log("Hello");
  return i;
})
console.log(a);

let b = Array(5).map((k,i)=>{
  console.log("Hello");
  return i;
})
console.log(b);

let c = Array(5)
let d = [...Array(5)]
console.log(c) // c and d seem to be the same
console.log(d)

【问题讨论】:

  • 用Array(5)上的地图解释你的意思
  • Array(5) 返回一个初始容量为 5 个元素的数组,所有元素均为空。 [...Array(5)] 返回一个包含 5 个未定义元素的数组。 map 跳过空元素。
  • 您的链接问题中接受的答案实际上不是真的,地图不会跳过undefined,这个sn-p 工作得很好:[undefined].map(() => {console.log('ayo')})。它在这种情况下特别不运行,因为它是空插槽,这与undefined 不同。请看下面我的回答。 @HereticMonkey
  • 希望这个问题得到澄清。我假设这对于全职 javascript 开发人员来说很容易。 @Vitim.us

标签: javascript arrays


【解决方案1】:

因为当你直接调用Array(5)时,它会创建一个空数组,而不是一个有5个undefined的数组。这就是为什么当你调用 map 时什么都没有发生的原因,因为它没有任何东西可以迭代,所以它立即返回。

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

见:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Array

【讨论】:

    猜你喜欢
    • 2011-05-20
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 2014-11-20
    • 2010-09-18
    相关资源
    最近更新 更多