什么是.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"