Number()
和 parseInt()
通常用于將字符串轉(zhuǎn)換為數(shù)字哮针。
區(qū)別
Number()
轉(zhuǎn)換類型概行,而 parseInt
解析輸入值漆改。
// 解析
parseInt('32px') // 32
parseInt('5e1') // 5
// 轉(zhuǎn)換類型
Number('32px') // NaN
Number('5e1') // 50
如您所見济竹,parseInt
將最多解析第一個非數(shù)字字符。另一方面剔宪,Number
將嘗試轉(zhuǎn)換整個字符串琉兜。
parseInt
接受兩個參數(shù)塌忽。第二個參數(shù)用于指示基數(shù)癞季。
parseInt('0101') // 101
parseInt('0101', 10) // 101
parseInt('0101', 2) // 5
Number('0101') // 101
當我們傳遞特殊值(如 undefined
或 null
)時劫瞳,它們返回不同的結(jié)果:
parseInt() // NaN
parseInt(null) // NaN
parseInt(true) // NaN
parseInt('') // NaN
Number() // 0
Number(null) // 0
Number(true) // 1
Number('') // 0
建議
始終將基數(shù)傳遞給 parseInt
。
parseInt
方法采用兩個參數(shù):
parseInt(value, radix)
第二個參數(shù)指定當前的數(shù)字系統(tǒng)绷柒。如果未指定,則將根據(jù)該值自動設置涮因。
如果該值以 0x
或 0X
開頭废睦,則基數(shù)為 16(十六進制)
在其他情況下,基數(shù)為 10(十進制)养泡。
在舊版本的 JavaScript 中嗜湃,如果字符串以 0 開頭奈应,則基數(shù)設置為 8(八進制)。
parseInt('0xF') // 15
parseInt('0XF') // 15
parseInt('0xF', 16) // 15
parseInt('0xF', 10) // 0
由于該方法在不同版本的 JavaScript 和瀏覽器中可以實現(xiàn)不同购披,因此建議傳遞基數(shù)杖挣。
在解析數(shù)字之前修剪空格。
Number()
和 parseInt
都接受輸入中的空格刚陡。但請注意惩妇,在傳遞帶有空格的值時,可能會得到不同的結(jié)果筐乳,如下所示:
parseInt(' 5 ') // 5
parseInt('12 345') // 12歌殃,不是12345
為避免類似情況,應在分析之前刪除所有空格:
parseInt(value.replace(/\s+/g, ''), 10)
不要使用 new Number()
來比較數(shù)字蝙云。
Number('2') == 2 // true
Number('2') === 2 // true
new Number('2') == 2 // true
new Number('2') === 2 // false
const a = new Number('2')
const b = new Number('2')
a == b // false
a === b // false
提示
您可以使用 +
運算符氓皱,而不是使用 Number()
構(gòu)造函數(shù)將字符串轉(zhuǎn)換為數(shù)字:
+'010' // 10
+'2e1' // 20
+'0xF' // 15