['1','2','3'].map(parseInt)的返回值是什么?

['1','2','3'].map(parseInt)的返回值是什么?

你的第一反应结果是否是[1,2,3],可是真正的结果是[1, NaN, NaN]。为何呢?首先看一下数组中的map方法。数组

map方法

引入MDN的解释,map()方法建立一个新数组,其结果是该数组中的每一个元素都调用一个提供的函数后返回的结果。bash

var arr = [1, 2, 3];
var arr1 = arr.map(x => x+1);
console.log(arr1); // 2,3,4
复制代码

能够看出map方法中接受一个函数function,用来处理遍历数组中的每个元素。函数

new_array = [].map(function callback(currentValue[,index[,array]]){ // Return element for new_array }[, thisArg]);
复制代码

这个callback一共能够接收三个参数,其中第一个参数表明当前被处理的元素,第二个参数表明该元素的索引。this

parseInt函数

parseInt是用来解析字符串,使字符串成为指定基数的整数,parseInt的基本语法,spa

parseInt(string, radix)
复制代码

接收两个参数,第一个表示被处理的值(字符串),第二个表示为解析时的基数。radix是一个介于2-36之间的整数,返回解析后的整数值。 若是被解析参数的第一个字符没法被转化成数值类型,则返回 NaNcode

praseInt('111') // 111
parseInt('111', 0) // 111 
// radix为0时,且string参数不以“0x”和“0”开头时,按照10为基数处理
parseInt('111', 1) // NaN 【2 <= radix <= 36】
parseInt('111', 2) // 7
复制代码

从上面能够看出根据指定不一样的radix,返回不一样的值。索引

radix参数为n将会把第一个参数看做是一个数的n进制表示,而返回的值则是十进制。element

parseInt('123', 5) // 将'123'看做5进制数,返回十进制数38 => 1*5^2 + 2*5^1 + 3*5^0 = 38
复制代码

下面咱们来分析一下['1', '2', '3'].map(parseInt);字符串

  1. parseInt('1', 0); // radix为0时,使用默认的10进制。
  2. parseInt('2', 1); // radix值在2-36,没法解析,返回NaN
  3. parseInt('3', 2); // 基数为2,2进制数表示的数中,最大值小于3,没法解析,返回NaN

map函数返回的是一个数组,因此最后结果为[1, NaN, NaN]string

相关文章
相关标签/搜索