將數字轉換爲字符串(就速度優勢,清晰度優勢,內存優勢等而言)的「最佳」方法是什麼?在JavaScript中將數字轉換爲字符串的最佳方式是什麼?
一些例子:
String(n)
n.toString()
""+n
n+""
將數字轉換爲字符串(就速度優勢,清晰度優勢,內存優勢等而言)的「最佳」方法是什麼?在JavaScript中將數字轉換爲字符串的最佳方式是什麼?
一些例子:
String(n)
n.toString()
""+n
n+""
這樣的:
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
樣品慢倍。
有些情況下,轉換可能不會返回可取的答案:'''+ 123e-50'返回'「1.23e-48」'。 – hongymagic 2013-10-30 06:35:03
如果你看看http://jsperf.com/number-to-string/2,這個答案似乎不再是真實的。 可能值得更新:) – drublic 2015-04-27 07:21:21
@hongymagic:這個答案實際上是唯一可以想象的:數字並不關心也不知道它是如何輸入的,而標準的印刷表示在點之前只有一個數字。 – Svante 2015-09-02 18:32:51
在我看來,n.toString()
爲清晰起見,我認爲它沒有任何額外的開銷。
「我不認爲」不應該是一個可接受的答案。 – 2017-10-26 15:01:54
它確實帶來了一些開銷,即使它在最近的瀏覽器版本中並不重要。在Firefox量子至少 – peter 2018-02-05 06:45:48
我喜歡前兩個,因爲它們更容易閱讀。我傾向於使用String(n)
,但這只是一個風格問題而已。
也就是說,除非你有一個行
var n = 5;
console.log ("the number is: " + n);
這是非常自我解釋
最簡單的方法,以任何變量轉換爲字符串爲空字符串添加到該變量。
5.41 + '' // Result: the string '5.41'
Math.PI + '' // Result: the string '3.141592653589793'
請注意,它需要在parens裏面:'(5.41 +'')'使用像'.substring()'等字符串方法 – Gjaa 2016-04-02 04:47:33
我認爲這要看情況,但無論如何,你可以使用.toString()
方法,因爲它是很清楚的瞭解。
顯式轉換對於那些對該語言不熟悉的人來說非常清楚。正如其他人所暗示的那樣,使用類型強制,如果開發人員沒有意識到強制規則,就會導致歧義。最終開發人員的時間比CPU時間更昂貴,所以我會以後者爲代價優化前者。這就是說,在這種情況下,差異可能可以忽略不計,但如果不是這樣,我相信有一些像樣的JavaScript壓縮器可以優化這類事情。
因此,由於上述原因,我會去:n.toString()
或String(n)
。 String(n)
可能是更好的選擇,因爲如果n
爲空或未定義,它將不會失敗。
問題是關於轉換數字,或「空」或「未定義」。如果由於程序中的錯誤導致'n'爲'null'或'undefined',那麼我寧願我的程序在這種狀態下失敗,以便更好地找到並修復錯誤。程序崩潰是給程序員的禮物,幫助她找到bug :-)。另一種方法是提供不按設計工作的軟件,並仔細掩蓋錯誤。所以,我不喜歡使用'String(n)'來掩蓋錯誤。 – 2015-09-22 12:12:18
'String(n)'很適合在功能風格中使用,例如與下劃線的組合'_.compose(funcThatNeedsAStringParam,String)'。 – 2017-04-17 14:21:33
String(null)不會使程序崩潰,但會返回字符串「null」,這可能不是您想要的。如果數據可以合法地爲空,那麼你需要明確地處理它。 – 2017-05-23 01:35:29
如果我不得不把一切都考慮進去,我會建議以下
var myint = 1;
var mystring = myint + '';
/*or int to string*/
myint = myint + ''
恕我直言,其轉換爲字符串的最快方法。糾正我,如果我錯了。
如果您需要到格式結果爲特定小數位數,例如代表貨幣,你需要的東西像toFixed()
方法。
number.toFixed([digits])
digits
是數字的小數位後顯示的數目。
舌頭在臉頰明顯:
var harshNum = 108;
"".split.call(harshNum,"").join("");
或者在ES6,你可以簡單地使用template strings:
var harshNum = 108;
`${harshNum}`;
2..toString(); // the second point is correctly recognized
2 .toString(); // note the space left to the dot
(2).toString(); // 2 is evaluated first
如果你是好奇,這是最高性能的檢查了這一點e我比較了所有不同的Number - > String轉換。
看起來像2+''
或2+""
是最快的。
我們也可以使用String構造。根據this benchmark這是在Firefox 58中將數字轉換爲字符串的最快方式,即使它在流行的瀏覽器Google Chrome中的速度比 " + num
慢。
http://jsben.ch/#/ghQYR我猜不會有太大的區別,但關於純速度檢查基準。 – EscapeNetscape 2016-10-20 22:44:21