Javascript 在这种情况下.map()在做什么?
使用Chrome控制台,这是我的输入和输出:Javascript 在这种情况下.map()在做什么?,javascript,Javascript,使用Chrome控制台,这是我的输入和输出: [0].map(Array); [[0, 0, [0]]]; // output 这里发生了什么 编辑 这让我好奇的原因是 [0].map(String); 会回来的 ["0"]; 而不是 ["0", "0", "String"] 正在使用三个参数调用Array()函数,即数组元素0的值、该元素的索引(也是0)以及对整个数组的引用 就像这样做: var a = [0]; var index = 0 Array(a[index], index
[0].map(Array);
[[0, 0, [0]]]; // output
这里发生了什么
编辑
这让我好奇的原因是
[0].map(String);
会回来的
["0"];
而不是
["0", "0", "String"]
正在使用三个参数调用Array()
函数,即数组元素0
的值、该元素的索引(也是0
)以及对整个数组的引用
就像这样做:
var a = [0];
var index = 0
Array(a[index], index, a); // create array with three elements
然后,由array()
返回的数组将成为.map()
创建的数组的第一个元素,从而在[[0,0,[0]]]
结果中增加嵌套级别
关于编辑的编辑:当您说
[0].map(字符串)时代码>导致使用相同的三个参数调用String()
,如String(a[index],index,a)
,但String()
函数忽略除第一个参数以外的所有参数,而Array()
使用所有提供的参数。首先,Array
可用作创建数组的函数:
var-arr=Array(1,2,“你好”);
console.log(arr);//[1,2,“你好”]
在您更新问题之后。其他答案为您提供有关
要回答为什么数组和字符串不同,请查看构造函数
字符串构造函数在数组执行此调用时接受1个参数
[0].map(Array);
给出的结果与您编写的类似:
[0].map(function (value, index, array) {
return Array(value, index, array);
})
函数是使用三个参数调用函数:元素的值、元素的索引和整个数组。调用Array
将返回包含3个元素的数组:值(number0
)、索引(number0
)、整个数组([0]
)
这个新数组被包装在原始数组中,因为您将原始元素(number0
)映射到新元素(3个元素的数组)
注意:您可能习惯于只使用第一个参数,如
array.map(function (a) { return a * a; });
或者只使用两个来获取索引
array.map(function (item, index) { return "index=" + index + ", value=" + item; });
但是您需要记住,map
仍然提供3个参数,您只需在回调函数中忽略它们即可。这也是为什么代码类似于:
[0].map(String);
返回
["0"]
这是因为函数只关心第一个参数,而忽略其他传递的参数。
如果你打电话
String(11, "Some", "other", "ignored", "parameters")
你仍然会得到
"11"
这也是为什么.map(Number)
将每个项目转换成一个数字,而不是为每个项目返回类似[3,2,4,1,3]
的内容的原因。@Xufox是的答案在构造函数中:)我想,因为他总是需要一些Javascript wtf才能感到快乐,所以它只是['10','10','10'的一个不太wtf-y的变体.map(parseInt)
另一种奇怪的.map()
行为:一般来说,在使用带有多个参数的函数时,必须小心。只需执行[0即可。map(console.log)
@Jacksonkr:谢谢你的回答。我想是这样的:我写了一条评论,解释说看到JS WTFs让我很高兴我不用经常使用这种语言。有人问如果我不喜欢这种语言,为什么我会看JS问题。npst回答,前两条评论被删除。有趣的是,他的评论仍然被高估,是的。