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 ]
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP