使用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)
更新问题后.其他答案为您提供有关地图的信息
回答为什么数组和字符串不同看构造函数
字符串构造函数接受1个参数String(thing)而array new Array(element0,element1 [,... [,elementN]])
| 归档时间: |
|
| 查看次数: |
4744 次 |
| 最近记录: |