假设我们得到了以下代码和输出,我们需要弄清楚为什么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 ]