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 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.