js map

["1","2","3"].map(parseInt)
RETURN: [1,NaN,NaN]

["1","2","3"].map(e => parseInt(e))
RETURN: [1,2,3]

看看 parseInt 的 MDN文档, 其中对返回 NaN 的描述:

parseInt
An integer number parsed from the given string. If the first character cannot be converted to a number, NaN is returned ( 如果第一个字符不能被转换成数字,parseInt 返回 NaN。)

基本判断是因为 parseInt 的返回值不正确
parseInt 的语法是 parseInt(string[, radix])radix 默认为 10

回头看开头的例子: ["1","2","3"].map(parseInt)
并没有为 parseInt 明确的传递参数

再看看 map

Array.prototype.map
Array.prototype.map(callback(currentValue, index, array) {
// Return element for new_array
}[, thisArg])
callback 函数会被自动传入三个参数:当前的数组元素,元素索引,原数组本身。

明显的, callback函数声明, 并且自动会接受三个参数
再回头看开头的例子: ["1","2","3"].map(parseInt)
这种直接调用已有函数的写法(注1)使 parseInt 自动接收了三个参数
造成 NaN 的原因就是第二个参数被传入了 元素索引

注1:
parseInt 就是一个函数声明
可以简单看做是:

	function parseInt(string, radix){}

前面提到, callback 默认会自动传递三个参数
默认传递的参数与 parseInt 的语法冲突
所以 radix 既不是默认值又得不到正确的值, 就返回 NaN

posted @ 2017-10-10 01:22  lcysgsg  阅读(210)  评论(0编辑  收藏  举报