我是初学者es6,这是我希望回答的问题。
我不明白以下代码的操作。该功能如何运作?
<script>
var numbers = [1, 2 ,3];
a = numbers.map(function(x, y , z){
return x + y + z;
});
console.log(a);
</script>
为什么只打印更改元素(x -'1')?为什么改变呢? 这是结果:
["11,2,3", "31,2,3", "51,2,3"]
答案 0 :(得分:2)
.map
的语法是:
.map(currentElement,index,array)
所以你的第一次迭代看起来像是:
1 + 0 +&#34; 1,2,3&#34;
为什么"1,2,3"
?因为当您对Objects进行算术运算时,它会尝试将值转换为数字,如果失败,它将返回object.toString()
。对于数组,.toString
将返回以逗号分隔的元素列表。
现在为什么11,2,3
或31,2,3
?
这是因为,plus运算符(+
)也有对concat字符串的覆盖。
所以它将返回x + y
的算术和,因为它们都是数字,并且会与z
连接,因为z
是一个字符串。因此,
1 + 0 +&#34; 1,2,3&#34; =&GT; 1 +&#34; 1,2,3&#34; =&GT; &#34; 11,2,3&#34;
2 + 1 +&#34; 1,2,3&#34; =&GT; 3 +&#34; 1,2,3&#34; =&GT; &#34; 31,2,3&#34;
3 + 2 +&#34; 1,2,3&#34; =&GT; 5 +&#34; 1,2,3&#34; =&GT; &#34; 51,2,3&#34;
答案 1 :(得分:0)
代码不是很有用。它的工作原理如下:
map
回调中获得的x,y和z的值为:
x
:数组元素的值(1,然后是2,然后是3)y
:数组中出现该值的索引(0,然后是1,然后是2)z
:数组本身([1, 2, 3]
)如果你添加这三个值,你会得到这个:
x+y
:在第一次迭代中变为1 + 0,在第二次迭代中变为2 + 1,在第三次迭代中变为3 + 2 x+y+z
:触发将数组(z
)转换为字符串"1,2,3"
。将此结果添加到x+y
的结果将触发将先前结果转换为字符串,即第一次迭代中的"1"
。然后将两者连接起来,因此在第一次迭代中,您得到"11,2,3"
。所以11真的是1(x+y
),然后是1,2,3
(z
)。