new Array(3)
返回包含3个undefined
S的相当于[undefined, undefined, undefined]
长度3的阵列;的Javascript映射()
然而,
[undefined, undefined, undefined].map((val, i) => i)
产生的[0, 1, 2]
预期的结果。但new Array(3).map((val, i) => i)
产生[undefined, undefined, undefined]
,仿佛映射功能没有任何影响。
谁能解释一下为什么?
编辑 看起来我的理解存在缺陷new Array()
。它不会创建一个新的数组。它创建一个对象,其键值为length
,等于传入的参数。感谢您的答案和评论。
顺便说一句,如果你确实需要像[undefined, undefined, undefined]
这样的数组迭代/映射,或者任何事情,那么[...new Array(m)]
应该做的伎俩。
*含有3个undefineds这相当于[未定义,未定义未定义]; *这是不对的。 – 2017-06-14 16:50:52
Javascript中的数组是具有数值属性和'length'属性的奇特对象。 在'新阵列的情况下(3)',则产生具有其'length'设置为3,但没有任何数值属性的'Array'对象。你可以看到: > Object.keys(new Array(3)); Object.keys([undefined,undefined,undefined]); [“0”,“1”,“2”] 你可以用['Array.from']实现你想要的(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from?v = control): > Object.keys(Array.from({length:3})); [“0”,“1”,“2”] – error
Doh。锁定之前,我可以发布我的答案。 – error