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 ]
广告