[‘1’, ‘2’, ‘3’].map(parseInt)结果是什么?

  • 我们先将代码转化成常规的样子,
[‘1’,‘2’,‘3’].map(function(item, index){return parseInt(item,index)})

也就是 结果是[parseInt('1',0), parseInt('2',1), parseInt('3', 2)]

接下来我们就来看看parseInt,parseInt第一个参数是接下来要转化的数据, 第二个参数是转化的基数,这个基数在2~36之间,

  • 当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。

举例,如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。

    parseInt('1',0) = parseInt('1', 10) =1
    parseInt('2',1) = NaN
    parseInt('3',2) = NaN? 这个就不是很理解,为什么呢, 接下来我们分析下

parseInt是按照一个个的字符进行解析的,

  • 情况一: 若第一个字符不是数字或者是数字并大于基数则不用进行接下来的操作,结果是NaN:
  • 情况二: 第一个字符为数字且小于基数,则可继续看下一个字符, 判断条件和情况一一致,若不符合条件则结果为parseInt('第一个字符', 基数),否则继续看接下来的字符

综合就是: parseInt('符合条件的字符串', 基数)
例如:parseInt("17",6)=1,parseInt('17',9)=16;当解析17时,1属于6进制范围,7不属于6进制范围,当string的数字小于radix时(7<6),它会只解析到它的上一位,
即 parseInt('17',6) = parseInt('1',6) = 1;

这样我们就很容易明白为啥parseInt('3', 2) = NaN


yuan
19 声望0 粉丝