如何在JavaScript中將字符串轉換為數字

了解如何使用JavaScript將字符串轉換為數字


JavaScript提供了多種將字符串值轉換為數字的方法。

最好:使用Number對象

我認為最好的方法是在非構造函數上下文中使用Number對象(new關鍵詞):

const count = Number('1234') //1234

這也會照顧到小數。

數字是一個包裝對象可以執行許多操作。如果我們使用構造函數(new Number("1234")),它將返回一個Number對象而不是一個數字值,因此請注意。

Number vs new Number

注意數字之間的分隔符:

Number('10,000') //NaN
Number('10.00') //10
Number('10000') //10000

如果您需要使用十進制分隔符來解析字符串,請使用Intl.NumberFormat反而。

其他解決方案

使用parseInt()parseFloat()

整數的另一個好的解決方案是調用parseInt()功能:

const count = parseInt('1234', 10) //1234

不要忘記第二個參數,即基數,十進制數字始終為10,否則轉換可能會嘗試猜測基數並給出意外結果。

parseInt()嘗試從不僅包含數字的字符串中獲取數字:

parseInt('10 lions', 10) //10

但是如果字符串不是以數字開頭,您將得到NaN(不是數字):

parseInt("I'm 10", 10) //NaN

另外,就像Number一樣,數字之間使用分隔符也不可靠:

parseInt('10,000', 10) //10     ❌
parseInt('10.00', 10) //10     ✅ (considered decimals, cut)
parseInt('10.000', 10) //10     ✅ (considered decimals, cut)
parseInt('10.20', 10) //10     ✅ (considered decimals, cut)
parseInt('10.81', 10) //10     ✅ (considered decimals, cut)
parseInt('10000', 10) //10000  ✅

如果要保留小數部分而不是僅獲取整數部分,請使用parseFloat()。請注意,與parseInt()同級,它只需要一個參數–要轉換的字符串:

parseFloat('10,000')  //10     ❌
parseFloat('10.00')   //10     ✅ (considered decimals, cut)
parseFloat('10.000')  //10     ✅ (considered decimals, cut)
parseFloat('10.20')   //10.2   ✅ (considered decimals)
parseFloat('10.81')   //10.81  ✅ (considered decimals)
parseFloat('10000')   //10000  ✅

使用+

一種“技巧”是使用一元運算符+在字符串之前:

+'10,000'  //NaN ✅
+'10.000'  //10 ✅
+'10.00' //10 ✅
+'10.20'  //10.2 ✅
+'10.81'  //10.81 ✅
+'10000' //10000 ✅

看看它如何返回NaN在第一個示例中,這是正確的行為:它不是數字。

使用Math.floor()

類似於+一元運算符,但返回整數部分,用於Math.floor()

Math.floor('10,000') //NaN ✅
Math.floor('10.000') //10 ✅
Math.floor('10.00') //10 ✅
Math.floor('10.20') //10 ✅
Math.floor('10.81') //10 ✅
Math.floor('10000') //10000 ✅

使用* 1

通常是最快的選項之一,其行為類似於+一元運算符,因此如果數字為浮點型,則不會執行到整數的轉換。

'10,000' * 1 //NaN ✅
'10.000' * 1 //10 ✅
'10.00' * 1 //10 ✅
'10.20' * 1 //10.2 ✅
'10.81' * 1 //10.81 ✅
'10000' * 1 //10000 ✅

表現

這些方法中的每一種在不同的環境下都有不同的性能,這都取決於實現方式。就我而言* 1是贏家的明智之選,比其他替代產品快10倍。

使用JSPerf嘗試一下:

Performance in conversion

免費下載我的JavaScript初學者手冊


更多js教程: