为什么Array.map(Number)将空白转换为零?的JavaScript

假设我们得到了以下代码和输出,我们需要弄清楚为什么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得出true,因此每个空格都转换为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
]