JavaScript: parseInt's radix mystery with Array.map
JavaScript: parseInt's radix mystery with Array.map
当我执行以下语句时:
var string = "1 1 1 1 1 1 0 1 1"
console.log(string)
var strings = string.split(" ")
console.log(strings)
var numbers1 = strings.map(parseInt)
console.log(numbers1)
var numbers2 = strings.map(function(i){ return parseInt(i, 10) })
console.log(numbers2)
我在控制台中得到以下输出:
1 1 1 1 1 1 0 1 1
["1", "1", "1", "1", "1", "1", "0", "1", "1"]
[1, NaN, 1, 1, 1, 1, 0, 1, 1]
[1, 1, 1, 1, 1, 1, 0, 1, 1]
我想知道为什么numbers1
中的第二个元素是 NaN。为什么它适用于除此元素之外的所有其他元素?
这是因为map
传递了额外的参数。
Array.prototype.map = function(currentValue, index, array)
因此,当它位于索引 1 处时,它将 1 作为基数传递。
Array.prototype.map
有三个参数传递给我们设置为参数的回调:
* value
* index
* arr
当我们检查parseInt
的规范时,我们可以看到parseInt可以接收两个参数。
* string
* radix
前者是要解析的字符串,后者是转换值的比率。
当我们运行代码片段 1 代码时,以下内容实际上是
<小时 />> parseInt("1", 0)//1
> parseInt("1", 1)//NaN
> parseInt("1", 2)//1
> parseInt("1", 3)//1
您可以将箭头功能与parseInt
一起使用
array.map(e => parseInt(e, 10));
使用Number
而不是parseInt
。
arr.map(Number);
或者您也可以使用匿名功能。
arr.map(function(num) {
return parseInt(num, 10);
});