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

Jac*_*nkr 95 javascript

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

[0].map(Array);

[[0, 0, [0]]]; // output
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

编辑

这让我好奇的原因是因为像

[0].map(String);
Run Code Online (Sandbox Code Playgroud)

将返回

["0"];
Run Code Online (Sandbox Code Playgroud)

并不是

["0", "0", "String"]
Run Code Online (Sandbox Code Playgroud)

nnn*_*nnn 123

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

所以就像这样做:

var a = [0];
var index = 0
Array(a[index], index, a);   // create array with three elements
Run Code Online (Sandbox Code Playgroud)

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

关于你的编辑编辑:当你说[0].map(String);,在结果String()被称为具有相同的三个参数类似String(a[index], index, a),但String()功能忽略所有,但第一个参数,而Array()使用所有提供的参数.


ibr*_*rir 39

首先,Array可以用作创建数组的函数:

var arr = Array(1, 2, "Hello");

console.log(arr); // [1, 2, "Hello"]
Run Code Online (Sandbox Code Playgroud)

其次,map将三个参数传递给它的回调:元素,它来自数组的索引和数组本身.

因此,由于您的数组包含一个元素,因此该行:

[0].map(Array);
Run Code Online (Sandbox Code Playgroud)

相当于:

[Array(0, 0, [0])];     // the element 0 in the original array will be mapped into Array(0, 0, [0])
Run Code Online (Sandbox Code Playgroud)


Vol*_*hat 6

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

回答为什么数组和字符串不同看构造函数

字符串构造函数接受1个参数String(thing)而array new Array(element0,element1 [,... [,elementN]])

  • 这就是为什么`.map(Number)`将每个项转换为数字而不是为每个项返回类似`[3,2,[4,1,3]]`的原因. (2认同)