JavaScript 中的 Array.map(Number) 为何将空格转换为零?


假设获得以下代码和输出,然后需要找出 Javascript 为何将空字符串(“ ”)转换成 0 −

const digify = (str) => {
   const parsedStr = [...str].map(Number)
   return parsedStr;
}
console.log(digify("778 858 7577"))

输出

[
7, 7, 8, 0, 8,
5, 8, 0, 7, 5,
7, 7
]

这样的行为会非常扰乱,尤其当字符串中还有 0 时

这样做的原因实际上是,在 map() 函数内部,当我们使用 Number 将每个字符转换成其对应的数值时,它实际采用的抽象相等比较(==),而不是严格相等比较(===),根据抽象相等比较,“ ” == 0 的结果为真,因此每个空格都被转换成 0。

为防止出现这种荒谬的行为,我们可以对 map() 函数进行一些调整,如下所述 −

const sin = (str) => {
   const parsedStr = [...str].map(i => parseInt(i, 10))
   return parsedStr;
}
console.log(sin("778 858 7577"))

这样,每当遇到一个空格时,它都会被转换成 NaN,这是一种更合乎逻辑的行为。

输出

[
7, 7, 8, NaN, 8,
5, 8, NaN, 7, 5,
7, 7
]

更新于: 18-Aug-2020

328 次查看

开启你的 职业生涯

通过完成课程获得认证

开始
广告