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

首先,要想理解这个结果,就必须先深入理解parseInt函数和map函数的含义。

parseInt()

用法:将传入的字符串解析成数值,并返回一个结果。

语法:parseInt(string,radix)

string 必填。待转换的字符串参数。
radix 选填,若忽略次参数或传入0,则以十进制来解析。转换使用的基数(即多少进制)。取值范围在2~36之间,如果不在这个范围,则解析结果会返回NaN。

注意:

parseInt()会根据传入的字符串识别出整数格式,如果字符串以“0x”开头且后跟数字字符,就会将其当做一个十六进制数,如果以“0”开头且后跟字符串,ECMAScript3则会将其当做一个八进制数来解析(ECMAScript5会判断为十进制)。

map

ECMAScript5的内置数组迭代方法,将数组作为它的参数,对数组中的每一项运行给定的函数,返回每次函数调用的结果组成的数组。

语法:array.map(callbackfn[, thisArg])

例子:将数组每一项乘以2以后,返回新数组

[1,2,3].map(function(value) {
   return  value*2;
})

注意:

回调函数的使用为:function callbackfn(item, index, array) {},即会传入三个参数——数组每一项元素的值、元素的索引、整个数组对象。

标题的原因

因为parseInt()是javaScript的内置函数,所以在用map迭代时,会给parseInt()函数传入三个值,即传入的情况是这样的:

//强制把数组元素的索引传到parseInt()的第二个参数中
parseInt("1", 0, ["1", "2", "3"]);
parseInt("2", 1, ["1", "2", "3"]);
parseInt("3", 2, ["1", "2", "3"]);    

第三个数组参数被忽略,运行的结果为:

将字符串“1”转换成十进制,结果为1;

将字符串“2”转换成1进制,这里不存在1进制,也就是说不符合2~36的范围,返回NaN;

同理,第三个元素的处理也是NaN。

因此!最后返回的结果为标题中的[1,NaN,NaN]。

猜你喜欢

转载自www.cnblogs.com/xiaokeai0110/p/9645147.html