JavaScript:使用Array.map解析parseInt的基础之谜

时间:2016-02-03 14:51:03

标签: javascript

当我执行以下语句时:

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。为什么它适用于除此之外的所有其他元素?

2 个答案:

答案 0 :(得分:7)

这是因为map传递了其他参数。

Array.prototype.map = function(currentValue, index, array)

因此当它在索引1时,它将1作为基数传递。

答案 1 :(得分:3)

Array.prototype.map有三个参数传递给我们设置为参数的回调:

* value
* index
* arr

当我们检查parseInt的规范时,我们可以看到parseInt可以接收两个参数。

* string
* radix

前者是要解析的字符串,后者是转换值的比率。

当我们运行Snippet 1代码时,以下实际上是

  

> parseInt(" 1",0)// 1

     

> parseInt(" 1",1)// NaN

     

> parseInt(" 1",2)// 1

     

> parseInt(" 1",3)// 1

您可以将Arrow functionparseInt

一起使用
array.map(e => parseInt(e, 10));

使用Number代替parseInt

arr.map(Number);

或者您也可以使用匿名功能。

arr.map(function(num) {
    return parseInt(num, 10);
});