对Aarry.from( )第二个函数参数和array.map()的疑惑和自己的理解【2021.11.24】

本文探讨了JavaScript中Array.from方法在使用回调函数时的行为。通过示例解释了为什么在不同情况下,数组元素被转换为[1, NaN, NaN]或全部替换为同一字符串。分析了回调函数的参数传递及其对数组值的影响,揭示了parseInt函数在解析数字时的基数规则。同时,提出了对回调函数直接修改数组值的原理猜想。
摘要由CSDN通过智能技术生成

我们先来看三个例子?

let arrayOne = [1,2,3].map(parseInt);
    console.log(arrayOne);//Array(3) [ 1, NaN, NaN ]
let arrayTwo = [1, 2, 3];
    let new_array = Array.from(arrayTwo,parseInt);
    console.log(new_array);//Array(3) [ 1, NaN, NaN ]
    let arrayThr = [1, 2, 3,5];
    let new_array_b = Array.from(arrayThr,()=>'中国');
    console.log(new_array_b);//Array(4) [ "中国", "中国", "中国", "中国" ]

先说说我的观点吧:Aarry.from( )如果有第二个参数也就是回调函数(这个参数可以直接增强新数组的值),那么数组或者新数组(由类数组结构转换为数组实例的新数组)会给这个回调函数默认传递两个参数:当前值和索引。这也是为什么第二个例子是 [ 1, NaN, NaN ]的原因,因为parseInt是可以接受两个参数的,第一个参数是要解析的字符串,第二个参数是要解析的数字的基数,介于2-36之间,省略或者为0按10为基数,0X或0x按16为基数。

换句话说,等同于下面的代码:

parseInt('1',0)=1,

parseInt('2',1)=NaN,

parseInt('3',2)=NaN,

同理,第一个例子也是一样的,不过是给回调函数传递了三个参数:当前值、索引、当前数组,而parseInt忽略了第三个参数,所以结果也是[ 1, NaN, NaN ]

现在谈一下为什么第三个例子可以直接更改数组的值,我的猜想是,这个回调函数的结果是直接放回原数组的,也就是说我的返回值无论是字符串还是数字或者是其它类型,这个返回值都会取代原数组对应位置的值的。

以上仅是个人结论和猜想,如有问题欢迎指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值