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
了