新数组()的Javascript映射

新数组()的Javascript映射,javascript,arrays,undefined,Javascript,Arrays,Undefined,新数组(3)返回一个长度为3的数组,其中包含3个未定义的s,相当于[未定义,未定义,未定义] 但是, [undefined,undefined,undefined].map((val,i)=>i)生成[0,1,2]的预期结果。但是新数组(3).map((val,i)=>i)生成[未定义,未定义,未定义],就好像map函数没有任何效果一样 有人能解释一下原因吗 编辑 我对new Array()的理解似乎存在缺陷。它不会创建新数组。它创建一个keylength等于传入参数的对象。谢谢你的回答和评论

新数组(3)
返回一个长度为3的数组,其中包含3个
未定义的
s,相当于
[未定义,未定义,未定义]

但是,

[undefined,undefined,undefined].map((val,i)=>i)
生成
[0,1,2]
的预期结果。但是
新数组(3).map((val,i)=>i)
生成
[未定义,未定义,未定义]
,就好像map函数没有任何效果一样

有人能解释一下原因吗

编辑 我对
new Array()
的理解似乎存在缺陷。它不会创建新数组。它创建一个key
length
等于传入参数的对象。谢谢你的回答和评论

顺便说一句,如果您确实需要像
[undefined,undefined,undefined]
这样的数组来进行迭代/映射,或者进行任何操作,那么
[…new array(m)]
应该可以做到这一点

新数组(3)返回一个长度为3的数组,其中包含3个未定义的数组,该数组相当于[undefined,undefined,undefined]

不符合:

这意味着阵列长度的空插槽数组,而不是具有实际未定义值的插槽

执行新数组(3)时,Javascript会为包含3个元素的数组保留内存,但不会定义其中任何元素


当您通过[undefined,undefined undefined]创建数组时,它实际上创建了3个元素,每个元素的值都未定义(因此,它是一个长度为3的数组)。

了解javascript中没有数组类型很重要。内置的
数组
只是一种方便,它包裹在标准的
对象
上。唯一的区别是数组具有
length
属性,以特殊方式计算

新数组(3)
返回具有单个
长度
字段的对象。它不包含任何其他键

{
   length: 3
}
[undefined,undefined,undefined]
创建一个包含3个数字槽的对象:

{
   length: 3
   0: undefined,
   1: undefined,
   2: undefined,
}
这就不同了,因为
map
和其他迭代器查找对象中实际存在的数字键。
map
forEach
和friends背后的逻辑如下:

  for (var i = 0; i < A.length; i++)
      if (A.hasOwnProperty(i))
          do something with A[i]
for(变量i=0;i
包含3个未定义项,相当于[undefined,undefined,undefined];这是错误的。Javascript中的数组是具有数字属性和
length
属性的外来对象。在
新数组(3)
的情况下,生成一个
数组
对象,其
长度
设置为3,但没有任何数值属性。可以看到:>Object.keys(新数组(3));[]>Object.key([undefined,undefined,undefined]);[“0”、“1”、“2”]您可以通过:>Object.keys(Array.from({length:3}))实现所需的功能;[“0”、“1”、“2”]Doh。我还没来得及发布答案就被锁上了。