By Noxxxx from https://www.noxxxx.com/?post_type=post&p=255
欢迎分享与聚合,尊重版权,可以联系授权
[[1, 2], [3, 4]].map(([a, b]) => a + b);
我在阮一峰老师的ES6里看到这个 map 就想起了之前看到的一个面试题。
["1", "2", "3"].map(parseInt); //[1,NaN,NaN]
这个 map 函数的功能是啥都不知道,很尴尬…
map() 方法返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组。
通常情况下,map 方法中的 callback 函数只需要接受一个参数(很多时候,自定义的函数形参只有一个),就是正在被遍历的数组元素本身。
但这并不意味着 map 只给 callback 传了一个参数(会传递3个参数)。
通常使用parseInt时,只需要传递一个参数.但实际上,parseInt可以有两个参数.第二个参数是进制数.可以通过语句”alert(parseInt.length)===2″来验证.
map方法在调用callback函数时,会给它传递三个参数:当前正在遍历的元素, 元素索引, 原数组本身.
第三个参数parseInt会忽视, 但第二个参数不会,也就是说,parseInt把传过来的索引值当成进制数来使用.从而返回了NaN.
["1", "2", "3"].map(function(){ console.log(arguments.length) //3 }); ["1", "2", "3"].map(function(){ console.log(arguments[1]) //0 1 2 索引值 })
理解完毕,完美~
Thanks, great article.