[1,2,3].map(parseInt)

155 阅读3分钟

[1,2,3].map(parseInt)

结果

1,NaN,NaN

解析

[1,2,3].map(parseInt) 

//相当于
parseInt10//radix为0(数组索引0,map传过过来的参数,第一个是item,即parseInt第一个参数1,第二个是parseInt第二个参数0),为10进制,结果为1
parseInt21//string为2,此时radix为1(数组索引1),1不在radix的范围内,所以结果为NaN
parseInt32//string为3,此时radix为2(数组索引2),即为用二进制解析3,二进制解析的应该是比2小的数字或字符串,所以此时为NaN

...
//直到string为10

parseInt109//string为10,此时radix为9,结果 9 (1*9+0)

此题有三个考察点

  1. map函数
  2. parseInt函数
  3. 进制

map

map方法会给原数组中的每个元素都按顺序调用一次 callback 函数。callback 每次执行后的返回值(包括 undefined)组合起来形成一个新数组

参数

该方法有两个参数,第一个是回调函数,第二个在回调函数中this的指向

第一个参数回调函数接受三个参数,第一个是当前正在遍历的数组元素(必须),第二个参数是当前元素的索引值(非必须),第三个元素是数组本身(非必须)(引用)

第二个参数是thisArg,用于指定回调函数中this的指向(上下文环境)

注意
  • map遍历的数组在调用时就已经确定,即使在回调函数中增加或者减少数组项,也不会影响遍历次数。如果增加元素不会遍历到

  • 如果删除元素,则遍历的时候会访问不了元素 如下图:

image.png

截屏2023-02-10 下午8.35.09.png 解释一下答案为啥是[1,3,5,empty*3] : 虽然执行了ref.splice,但是item的值还是数组里的值,并且返回的是item,所以答案里出现删除的值不奇怪,另外,index是0,1,2。。。走着的,并不一直是数组第一个元素

parseInt() 函数

定义和用法

parseInt() 函数可解析一个字符串,并返回一个整数。

语法

parseInt(string, radix)

string

必需。要被解析的字符串。

  • string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。
  • string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字
  • string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数
radix
  • 可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。(0~9共10个数字,A~Z共26个字母,所以能表示36进制)

  • 如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。

  • 如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。

此时,如果解析的数组换一下,如下图 image.png