为什么[1,7,11] .map(parseInt)会回[1,NaN,3]?

为什么[1, 7, 11].map(parseInt)会回[1,NaN,3]?

我们先了解究竟map里面做了什么事情

var new_array = arr.map(function callback(currentValue [,index [,array]]){ 
    // new_array的返回元素
} [,thisArg])

callback为产生新阵列之元素的回呼函式,可降低三个参数:

  1. currentValue原阵列当前所产生的处理中的元素。
  2. index选择性原数组目前所进行的迭代处理中的元素之索引
  3. array选择性呼叫map方法的布局。

转换之后会变成下面这样

parseInt(1,0,[1,7,11]); 
parseInt(7,1,[1,7,11]); 
parseInt(11,2,[1,7,11]);

看出端倪了吗?

在了解一下parseInt所需要的参数

parseInt(stringradix);
  1. string待转成数字的字串。若string参数类型不是字串的话,会先将其转成字串(相当于先执行ToString再执行parseInt)空白值会被忽略。
  2. radix从2到36,能代表该进位系统的数字。例如说指定10就等于指定十进位。一定要定义这个参数指示器的他人的混淆,也好预测函式的行为。如果没有指定radix的话,变为的结果会按照实做不同而异,请注意,通常预设值不是 10进位。
parseInt(1,0,[1,7,11]);

因为第二个参数给0会预设当成false,系统自动十进位,所以产生答案是1

parseInt(7,1,[1,7,11]);

由于没有1进位,所以答案会是Nan

parseInt(11,2,[1,7,11]);

11 的二进位代表的就是3

总结

如果要用parseInt放进地图里面可以改用下面两种写法

[1,7,11] .map(Number); [1,7,11] .map(d => parseInt(d));

Author: bwh

发表评论