["1", "2", "3"].map(parseInt)为什么是[1,NaN,NaN] ?

[“1”, “2”, “3”].map(parseInt)

在学习前端中,我遇到了这么一道题。

var a = ["1", "2", "3"].map(parseInt);
console.log(a);	//	[1,NaN, NaN];

下面我们看一下 map 和 parse 这两种方法

1. map
  • map函数的参数是一个函数。而传入的函数里一般需要一个或者两个参数。即
var a = [1,2,3];
//一个参数
a.map(function(item){
	console.log(item);	//	1 2 3
})

//	两个参数
a.map(function(item,index){
	//	item 是值,index是下标
	console.log(item + " " + index); 
	//	1 0		2 1		3 2
})
2. parseInt
  • 用于解析字符串,并且返回一个整数
  • parseInt(string, radix) 其中string是传入的字符串,必选,而radix是基数,即让转化的整数以几进制返回。
  • radix:数字2-36之前的整型,默认使用10,表示十进制。这个参数的意义是指把前面的字符看作是多少进制的数字,所谓的基数。

parseInt(‘123’, 5) // 38
将’123’看作5进制数,返回十进制数38 => 15^2 + 25^1 + 3*5^0 = 38

  需要注意的是,如果radix在2-36之外会返回NaN。
  在没有指定基数,或者基数为 0 的情况下,JavaScript 作如下处理:
  1. 如果字符串 string 以"0x"或者"0X"开头, 则基数是16 (16进制).
  2. 如果字符串 string 以其它任何值开头,则基数是10 (十进制)。
  3. 如果字符串 string 以"0"开头, 基数是8(八进制)或者10(十进制),那么具体是
     哪个基数 由实现环境决定。ECMAScript 5 规定使用10,但是并不是所有的浏览器
     都遵循这个规定。因此,永远都要明确给出radix参数的值。

运行过程:

因为parse最多接收两个参数,则
传入数组中的value和index,结果如下:

parseInt('1', 0); // 1 (规定使用10来作为基数,相当于用十进制来表示1)
parseInt('2', 1); // NaN (radix传的是1,超出了radix的界限)
parseInt('3', 2); // NaN (以二进制来表示3是不可能的,因此返回NaN)
以上就是我的讲解。
练习:

如果各位读者觉得你懂了,给你出道题吧。

var a = ["1", "2", "1", "3"].map(parseInt);
console.log(a);

会输出多少呢?

发布了24 篇原创文章 · 获赞 26 · 访问量 2713

猜你喜欢

转载自blog.csdn.net/apple_2021/article/details/103243466