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

本文深入探讨了JavaScript中parseInt函数和Array.prototype.map方法的使用细节。通过具体示例解释了不同参数设置如何影响函数行为,并提供了面试题示例及其解析过程。

面试题 [1,2,3].map(parseInt)

经典面试题 [1,2,3].map(parseInt) = [1, NaN, NaN]
其实我们可以把它拆分成俩个来看
 - map数组方法
 	- 	函数,必选。 数组中的每个元素都会执行这个函数
 	- thisValue 可选。对象作为该执行回调时使用,传递给函数,用作 "this" 的值。如果省略了 thisValue,或者传入 null、undefined,那么回调函数的 this 为全局对象。
-  parseInt 函数
	- 	string ==> 必需。要被解析的字符串。
	-	可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。所以我理解的就是 这个radix参数 最小为2(0除外),最大为36,其他都是NaN
function fun(item, index, arr) {
  // item == 当前数组循环的每一项值
  // index ==  当前数组循环的每一项值下标
  // arr == 当前数组(一般正常情况下我们用不上)
  return item
}
let arr = [1, 2, 3]
let result = arr.map(fun)
console.log(parseInt(1, 0, arr)); // 1
console.log(parseInt(2, 1, arr)); // NaN
console.log(parseInt(3, 2, arr)); // NaN
// parseInt 函数只会接受俩个参数的 string 和 radix ,至于多传了一个参数
// 函数没有用上所以也没什么关系,那怕传10个参数无所谓的。

再来一个例题

let newArr = ["1", "2", "3", "4", "5", 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
newArr.map(parseInt) 
答案是: [1,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,9,11,13,15,17,19];
parseInt('1',0)=parseInt('1',10)=1;
parseInt('2',1) NAN
parseInt('4',3) 因为3进制范围为(0-2) 4不在3进制范围,所以NAN
同理;到
parseInt('10',9) = 1*9的1次方 + 0*9的0次方 = 9;
parseInt('11',10)= 1*10的1次方 + 1*10的0次方 = 11;
同理;如下
所以结果就是  [1,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,9,11,13,15,17,19];
但是呢 当我在测试的时候发现  
parseInt(108,8) ===  parseInt(109,8) // true
后来才发现 因为是8进制计算 8 和 9 被过滤了  只取到前面的10 
也就是说当不知一位数的时候 会过滤掉大于进制的数值 而且第一位不能大于进制的 否则直接返回NaN

如果有不对的地方,还望各路大佬指出!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值