今天看了一个js的题目["1","2","3"].map(parseInt),看到后脑海中浮现的答案是[1,2,3],但是看到正确答案后蒙了,不知道为什么答案会是[1,NaN,NaN],看了解释(http://developer.51cto.com/art/201504/474298_2.htm)但是还是没明白,没办法,只好重新无看下parseInt和map函数了。
1、parsrInt()
以前一直只有用到parseInt(x),返回一个整数,但是今天重新学习后才知道原来parseInt还有一个可选参数
parseInt(string, radix)
参数 | 描述 |
---|---|
string | 必需。要被解析的字符串。 |
radix |
可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。 如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。 如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。 |
radix表示string的基数,当radix存在时,string以radix基数解析,当radix为0或者无时,根据string来解析,"0x" 开头,以16进制解析,“0”开头,以十进制或8进制解析,1-9开头,以十进制解析
2、map()
map是对数组的每一个元素调用回调函数并返回一个包含结果的数组,有三个参数,其中一个可选参数
array1.map(callbackfn[, thisArg])
参数 | 定义 |
---|---|
array1 | 必需。一个数组对象。 |
callbackfn | 必需。一个接受**最多**三个参数的函数。对于数组中的每个元素,‘map‘ 方法都会调用 ‘callbackfn‘ 函数一次。 |
thisArg | 可选。可在 ‘callbackfn‘ 函数中为其引用 ‘this‘ 关键字的对象。如果省略 ‘thisArg‘,则 ‘undefined‘ 将用作 ‘this‘ 值。 |
map中回调函数的语法:function callbackfn(value, index, array1),可使用最多三个参数来声明回调函数。
第一参数value,数组元素的值;第二个参数index,数组元素的数组所以;array1,包含该元素的数组对象。
因此,["1","2","3"].map(parseInt)等于[parseInt(1,0),parseInt(2,1),parseInt(3,2)]
parseInt(1,0)//radix为0,1十进制为1
parseInt(2,1)//radix小于2,返回NaN
parseInt(3,2)//radix为2,3的二进制NaN