2011-04-23 176 views

回答

332

這樣的:

var foo = 45; 
var bar = '' + foo; 

其實,即使我通常不喜歡這樣的簡單方便,在迭代1000個出現爲原始速度沒有用於.toString()

優勢請看這裏的性能測試(不是我自己,但是當我去寫自己的時候發現): http://jsben.ch/#/ghQYR

最快基於上面的JSPerf測試:str = num.toString();

應當指出的是當你認爲它可以做任何改裝方式1萬次在0.1秒內在速度上的差異是不是太顯著。

更新:瀏覽器的速度似乎差別很大。在Chrome中num + ''似乎是最快的在此基礎上測試http://jsben.ch/#/ghQYR

更新2:再根據我的測試上面,應該指出的是,火狐20.0.1執行.toString()約100比'' + num樣品慢倍。

+34

有些情況下,轉換可能不會返回可取的答案:'''+ 123e-50'返回'「1.23e-48」'。 – hongymagic 2013-10-30 06:35:03

+0

如果你看看http://jsperf.com/number-to-string/2,這個答案似乎不再是真實的。 可能值得更新:) – drublic 2015-04-27 07:21:21

+12

@hongymagic:這個答案實際上是唯一可以想象的:數字並不關心也不知道它是如何輸入的,而標準的印刷表示在點之前只有一個數字。 – Svante 2015-09-02 18:32:51

222

在我看來,n.toString()爲清晰起見,我認爲它沒有任何額外的開銷。

+1

「我不認爲」不應該是一個可接受的答案。 – 2017-10-26 15:01:54

+0

它確實帶來了一些開銷,即使它在最近的瀏覽器版本中並不重要。在Firefox量子至少 – peter 2018-02-05 06:45:48

2

我喜歡前兩個,因爲它們更容易閱讀。我傾向於使用String(n),但這只是一個風格問題而已。

也就是說,除非你有一個行

var n = 5; 
console.log ("the number is: " + n); 

這是非常自我解釋

9

最簡單的方法,以任何變量轉換爲字符串爲空字符串添加到該變量。

5.41 + '' // Result: the string '5.41' 
Math.PI + '' // Result: the string '3.141592653589793' 
+0

請注意,它需要在parens裏面:'(5.41 +'')'使用像'.substring()'等字符串方法 – Gjaa 2016-04-02 04:47:33

2

我認爲這要看情況,但無論如何,你可以使用.toString()方法,因爲它是很清楚的瞭解。

36

顯式轉換對於那些對該語言不熟悉的人來說非常清楚。正如其他人所暗示的那樣,使用類型強制,如果開發人員沒有意識到強制規則,就會導致歧義。最終開發人員的時間比CPU時間更昂貴,所以我會以後者爲代價優化前者。這就是說,在這種情況下,差異可能可以忽略不計,但如果不是這樣,我相信有一些像樣的JavaScript壓縮器可以優化這類事情。

因此,由於上述原因,我會去:n.toString()String(n)String(n)可能是更好的選擇,因爲如果n爲空或未定義,它將不會失敗。

+3

問題是關於轉換數字,或「空」或「未定義」。如果由於程序中的錯誤導致'n'爲'null'或'undefined',那麼我寧願我的程序在這種狀態下失敗,以便更好地找到並修復錯誤。程序崩潰是給程序員的禮物,幫助她找到bug :-)。另一種方法是提供不按設計工作的軟件,並仔細掩蓋錯誤。所以,我不喜歡使用'String(n)'來掩蓋錯誤。 – 2015-09-22 12:12:18

+1

'String(n)'很適合在功能風格中使用,例如與下劃線的組合'_.compose(funcThatNeedsAStringParam,String)'。 – 2017-04-17 14:21:33

+0

String(null)不會使程序崩潰,但會返回字符串「null」,這可能不是您想要的。如果數據可以合法地爲空,那麼你需要明確地處理它。 – 2017-05-23 01:35:29

1

如果我不得不把一切都考慮進去,我會建議以下

var myint = 1; 
var mystring = myint + ''; 
/*or int to string*/ 
myint = myint + '' 

恕我直言,其轉換爲字符串的最快方法。糾正我,如果我錯了。

3

如果您需要到格式結果爲特定小數位數,例如代表貨幣,你需要的東西像toFixed()方法。

number.toFixed([digits]) 

digits是數字的小數位後顯示的數目。

7

舌頭在臉頰明顯:

var harshNum = 108; 
"".split.call(harshNum,"").join(""); 

或者在ES6,你可以簡單地使用template strings

var harshNum = 108; 
`${harshNum}`; 
12
2..toString(); // the second point is correctly recognized 
2 .toString(); // note the space left to the dot 
(2).toString(); // 2 is evaluated first 

Source

0

如果你是好奇,這是最高性能的檢查了這一點e我比較了所有不同的Number - > String轉換。

看起來像2+''2+""是最快的。

https://jsperf.com/int-2-string

0

我們也可以使用String構造。根據this benchmark這是在Firefox 58中將數字轉換爲字符串的最快方式,即使它在流行的瀏覽器Google Chrome中的速度比 " + num慢。

相關問題