数组构造函数未按预期工作

时间:2016-01-10 13:16:38

标签: javascript

我想创建具有固定长度的空数组,然后在其上使用.map返回新数组。但是,它没有按预期工作。

根据mdn docs

  

如果传递给Array构造函数的唯一参数是0到232-1(含)之间的整数,则返回一个长度设置为该数字的新JavaScript数组。

new Array(3)返回[undefined × 3]。不应该是:[undefined, undefined, undefined]

让我们考虑以下示例:

1)不能正常工作。

var a = new Array(3);
a.map((x, i) => i); // [undefined × 3]

2)工作。

var a = Array.apply(null, new Array(3));
a.map((x, i) => i); // [0, 1, 2]

我在最新的Google Chrome Canary上进行了测试。

3 个答案:

答案 0 :(得分:3)

来自MDNthis returns a new JavaScript array with length set to that number

new Array(n)创建的数组没有任何元素,只有一个长度。这就是为什么你不能映射(不存在)元素的原因。

答案 1 :(得分:1)

map按设计跳过未定义的元素。

来自documentation

  仅对已分配值

的数组的索引调用

callback

这里有很多与此主题相关的问题,并提供了创建数组的方法,地图将对所有元素进行操作,例如

new Array(3) . fill() . map(...

仅举一个例子,使用新的Array#fill方法。

答案 2 :(得分:0)

CodeiSirs补充说明的一个例子:



// foo and bar are identical. They are arrays with length 3 and no indices.
var foo = new Array(3);
var bar = [];
bar.length = 3;

console.log(foo);
console.log(bar);

// This is different. It has 3 indices with the value undefined.
var pez = [undefined, undefined, undefined];
console.log(pez);




控制台显示new Array(3)有点奇怪,因为它与[undefined, undefined, undefined]

不一样