要想整清楚[0,1,2].map(parseInt)是咋回事呢就得先从map()和parseInt()开始
map(),是数组的一个方法,使用map()会对数组里面的元素进行迭代,与此用时还会对这些元素进行处理(即原数组内每一个元素都会执行括号内的函数),处理完之后再返回一个数组。至于如何处理就看自己定义了,用法:[xxx].map(function(item,index,array){}),其中的function(){}会自动接收三个参数,即item,index,array(数组本身),之后map就会自动执行设置的函数。
ps:只要向map中传入函数,就会自动为函数附上对应的参数,并将函数执行。因为那三个参数本来就是数组本身的属性,即使用户不定义也会默认存在,用户只能选择使用或者不使用这些参数,以及使用多少个参数。
let arr = [0,1,2]
// arr.map(console.log)
arr.map(function(item, index, arr){
console.log(item, index, arr)
})
// 0 0 [0,1,2]
// 1 1 [0,1,2]
// 2 2 [0,1,2]
parseInt():括号内输入字符串(字符串内必须为数字,否则NaN),返回一个整数结果。可以传入第二个参数,作为一个基数,即告诉函数需要用多少进制。如果参数为0,则按照十进制进行转换;如果参数小于2或者大于36则返回NaN
const num = parseInt("666")
console.log(num) //666
const num1 = parseInt("0xB")
console.log(num1) //11
const num3 = parseInt("110",0) //十进制
const num4 = parseInt("110",1) //一进制
const num5 = parseInt("110",2) //二进制
console.log(num3, num4, num5) //110 NaN 6
['0','1','2'].map(parseInt)
无论如何map里面都会传入三个参数对应的值,函数需要返回,即返回parseInt,parseInt也需要接受参数,但原题没有写参数,就会把map的参数给parseInt,map默认参数有三个,parseInt只接受两个即可,函数可以接受比定义时多的参数,参数都保存在arguments对象中。函数改写如下
// ['0','1','2'].map(parseInt)
["0","1","2"].map(function(item, index, array){
return parseInt(item, index, array)
}) //[0,NaN,NaN]
// 实际执行如下
// parseInt("0",0) //0
// parseInt("1",1) //NaN
// parseInt("2",2) //NaN 二进制遇到大于一的数字会NaN
// parseInt("10",2) //2