['1','2','3'].map(parseInt)

前几天被问到这个问题,[1,2,3]脱口而出,结果被虐的渣都不剩,首先这个答案肯定是错的,那么应该输出什么呢?
在这里插入图片描述
为啥子会是这样呢?是因为我没有理解:
1)map函数传递参数的定义,2)parseInt函数针对于radix这个参数的理解。
通常使用map函数的时候都会传入一个函数,这个函数一般只使用1-2个参数,

let arr = ['1','2','3'].map(function(item){
	//1个参数
	return item;
});
//["1", "2", "3"]

let arr = ['1','2','3'].map(function(item, key){
	//2个参数
	return item+','+key;
});
//["1,0","2,1","3,2"]

其实map标准定义是会传递3个参数:

arr.map(function(item, key, arr){
	...
})

接下来看看parseInt的官方定义:

parseInt(string, radix)
string:需要转化的字符,如果不是字符串会被转换,忽视空格符。
radix:数字2-36之间的整型。默认使用10,表示10进制。
	这个参数的意义是指把前面的字符看作多少进制的数字,所谓的基数。

例:

parseInt('123',5)
//将"123"看作5进制的数,返回十进制数 38 => 1*5^2 + 2*5^1 + 3*5^0 = 38

如果radix在2-36之外会返回NaN。
在没有指定基数,或者基数为0的情况下,javascript作如下处理:

如果字符串string以 “0x” 或者 “0X” 开头,则基数是16,16进制;
如果字符串string以 “0” 开头,基数是8(8进制)或者10(10进制),根据实现环境决定。	
ECMAScript 5规定使用10,但是并不是所有浏览器都遵循这个规定,最好明确给出radix的值。
如果字符串string 以其他任何值开头,则基数是10,10进制。

所以:

let arr = ['1','2','3'].map(function(item, key, arr){
		//3个参数
		parseInt("1", 0) //0为10进制
		parseInt("2", 1) //radix中没有1进制一说
		parseInt("3", 2) //2进制中超过1的值不存在
	});
	//[1, NaN, NaN]

上图控制台的输出都可以作解释。
膜拜大佬:
https://www.cnblogs.com/Candybunny/p/5627905.html

猜你喜欢

转载自blog.csdn.net/qq_35790269/article/details/84563471
今日推荐