Array.from() parseInt() 的奇怪行为

Array.from() strange behavior with parseInt()

所以我尝试使用以下代码将字符串数组转换为数字数组。

let a = ["0", "0"];
let b = Array.from(a, parseInt);
console.log(b);

而我得到的是

b = [0, NaN];

我熟悉使用 Array.map() 的类似问题,因为它为 parseInt() 提供了三个参数,而第二个参数(索引)被 parseInt() 解释为基数。但 Array.from().

不应该是这种情况

有人可以给我解释一下吗?

你需要有实际功能,不是参考:

let a = ["0", "0"];
let b = Array.from(a, e => parseInt(e));

console.log(b);

问题是使用 map(这是 Array.from 的第二个参数)将三个参数传递给回调 - 当前项目(你想要的),索引(不必要的) ) 和数组(不必要)。所有这三个都应用于 parseInt - 所以它看起来像这样:

let b = Array.from(a, (item, index, arr) => parseInt(item, index, arr));

不幸的是,parseInt 使用第二个参数作为它生成的数字的基数(例如,十进制以 10 为底,二进制以 2 为底,八进制以 8 为底,十六进制以 16 为底)。传递的第二个参数是索引。所以它试图将 0 解析为基数 1 中的一个数字,该数字不存在。

您也可以只使用 Number 构造函数。

let a = ["0", "0"];
let b = Array.from(a, Number);

console.log(b);