Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在这种情况下.map()在做什么?_Javascript - Fatal编程技术网

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

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

使用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, 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个元素的数组:值(number
0
)、索引(number
0
)、整个数组(
[0]

这个新数组被包装在原始数组中,因为您将原始元素(number
0
)映射到新元素(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回答,前两条评论被删除。有趣的是,他的评论仍然被高估,是的。