后果为:[1,NaN,NaN], 起因如下
['1','2','3'].map(parseInt)
理论执行的代码是:
['1','2','3'].map((item,index)=>{ return parseInt(item,index)})
即返回的值别离为:
parseInt('1',0) //1parseInt('2',1) //NaNparseInt('3',2) //NaN
先理解map办法
map()办法创立了一个新数组,其后果是该数组的每个元素都调用一个提供的函数后返回的后果。并且不会扭转原数组
var new_array = arr.map(function callback(currentValue,index,array){ //可用箭头函数arr.map((currentValue,index,array)=>{}) //currentValue:是callback数组中正在解决的以后元素,index可选,以后元素的索引,array可选,是callback办法被调用的数组,另外,thisAry可选,执行callback函数时应用的this值},thisArg)
parseInt(string,radix)函数可解析一个字符串,并返回一个整数。
先看demo ,此处看似radix为进制。但官网文档解释为基数
var num1 = parseInt("10",2); //2 (按二进制解析)var num2 = parseInt("10",8); //8 (按八进制解析)var num3 = parseInt("10",10); //10 (按十进制解析)var num4 = parseInt("10",16); //16 (按十六进制解析)var num5 = parseInt("45",5) //4(当解析45时,4属于范畴内,所以失去4,然而5不属于,所以走到这里间接把前面摈弃掉,相当于parseInt("4",5)var num6 = parseInt("445",5) //24 (当解析445时,4属于范畴内,然而在前面的5不属于, 相当于 parseInt("44",5); , 依据进制算法,最终算出,从右往左 4*5^0+4*5^1 = 24)
当radix为0,小于2,或者大于36
parseInt('1',0); // 1 (radix是0的时候,按16/8进制解析,然而如果结尾是1-9就按10进制解析,所以是1)parseInt('2',1); // NaN ( radix参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。)parseInt('3',2); // NaN (radix的参数是2,所以按二进制解析,而二进制最大为1,只能为0,1, 3显然超了,转换不了,所以是NaN)
- string:须要被解析的字符串,必传
当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会依据 string 来判断数字的基数。当疏忽参数 radix , JavaScript 默认数字的基数如下:
- 如果 string 以 "0x" 结尾,parseInt() 会把 string 的其余部分解析为十六进制的整数。
- 如果 string 以 0 结尾,那么 ECMAScript v3 容许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。
- 如果 string 以 1 ~ 9 的数字结尾,parseInt() 将把它解析为十进制的整数。