什么是.map()在这种情况下做?

使用Chrome控制台,这是我的input和输出:

[0].map(Array); [[0, 0, [0]]]; // output 

这里发生了什么?

编辑

这让我好奇的原因是因为类似的东西

 [0].map(String); 

将返回

 ["0"]; 

并不是

 ["0", "0", "String"] 

.map()函数使用三个参数调用Array()函数,数组元素的值是0 ,该元素的索引也是0 ,以及对整个数组的引用。

所以这就像这样做:

 var a = [0]; var index = 0 Array(a[index], index, a); // create array with three elements 

Array()返回的Array()然后成为.map()创build的数组的第一个元素,因此嵌套在[[0, 0, [0]]]结果中的额外级别。

编辑关于你的编辑:当你说[0].map(String); String() String(a[index], index, a) ,但String()函数忽略除第一个参数以外的所有参数,而Array()使用所有提供的参数。

首先 ,可以使用数组来创build数组:

 var arr = Array(1, 2, "Hello"); console.log(arr); // [1, 2, "Hello"] 

在更新问题后。 其他答案为您提供有关地图的信息

为了回答为什么数组和string不同于构造函数

String构造函数接受1参数String(thing) while array new Array(element0,element1 [,… [,elementN]])

这个电话

 [0].map(Array); 

给你如同你写下这样的结果一样的结果:

 [0].map(function (value, index, array) { return Array(value, index, array); }) 

Map函数调用具有三个参数的Array函数:元素的值,元素的索引和整个数组。 这个对Array调用返回的数组有3个元素:value(number 0 ),index(number 0 ),whole array( [0] )。

而这个新的数组被封装在原始数组中,因为您将原始元素(数字0 )映射到新元素(3个元素的数组)

注意:您可能习惯于仅使用第一个参数

 array.map(function (a) { return a * a; }); 

或者只用两个来获得索引

 array.map(function (item, index) { return "index=" + index + ", value=" + item; }); 

但是您需要记住, map仍然提供了3个参数,您只需在callback函数中忽略它们即可。 这也是代码如下的原因:

 [0].map(String); 

回报

 ["0"] 

这是因为String函数只关心第一个参数而忽略其他传递的参数。 如果你打电话

 String(11, "Some", "other", "ignored", "parameters") 

你仍然会得到

 "11"