2012-12-18 96 views
3

所以今天我遇到了這種情況。我有一個整數和我需要比較的字符串。爲了比較兩者,我要麼必須toString()整數,要麼將字符串解析爲一個int。toString或parseInt javascript

這是我的問題,我應該選擇哪一個,兩者的性能有什麼不同? (即使它很小)是否有經驗法則?

下面是一個代碼示例:

var intI = 1; 
var stringS = '1'; 

if (intI.toString() == stringS) 
console.log('are equal'); 

//Or 
if (intI == parseInt(stringS)) 
console.log('are equal'); 

這將是最好的,如果我可以宣佈的整數,因爲我知道一個字符串(因爲它不用於計算)。但它在網站上到處都有使用。

+2

http://www.jsperf。com – jAndy

+0

確保當你調用parseInt時,你正在設置基地址,否則如果你的字符串是'07',它將被解釋爲八進制 –

+1

要小心parseInt($ num,10)的第二個參數。你想把Integer解析爲十進制,十六進制,八進制還是什麼?十進制使用「10」作爲第二個參數的值。這不是默認設置。 – algorhythm

回答

11

它取決於你想比性能更多的語義。字符串「001」是否應等於數字值1?如果答案爲「是」,則應將值轉換爲數字。如果不是,那麼你應該比較爲字符串。

不要擔心這些微不足道的事情的表現,除非你有一個應用程序正在執行數百萬次這樣的操作。

另請注意parseInt()並不關心一串數字是否在尾部有尾隨垃圾。那就是

parseInt("123skidoo", 10) === 123 

true

+0

嘿,這是一個全新的維度。但在我的情況下,字符串前面不會有0。然而非常有效的一點。 –

+0

@Xeano也看到我最後的編輯。 – Pointy

0

其實,在這種情況下,你不必轉換任何東西。當您將整數與字符串進行比較時,JavaScript引擎會自動將一個轉換爲另一個。您可以在您的網頁瀏覽器導航欄中輸入javascript:alert(1 == '1');來嘗試。它將返回「真實」。

+0

[感覺不需要評論](http://stackoverflow.com/questions/13934027/tostring-or-to-parseint-javascript#comment19426605_13934113) – rlemon

1

兩者的性能有任何區別嗎?

不明顯。但是,這兩種方法之間存在行爲差異,因爲parseInt也會將諸如0011xyz之類的字符串轉換爲數字1。你想要那個嗎?如果沒有,你應該把整數。

順便說一句,如果你只是使用== operator,字符串將隱含ToNumbered。這不允許僅以某些數字開頭的字符串(如1xyz),但任何數字表示形式相當於1,例如1.0001

0

默認情況下,您無需進行任何顯式轉換,因爲JavaScript會爲您處理它。它也取決於你想比較的語義。我不認爲我們應該擔心在這種微不足道的情況下的表現。

+0

這不是100%真實的。 '「1」== 1; // true'但是'「1」=== 1; // false'當比較兩種不同的類型時,您需要將它們轉換爲相同的類型,以確保它們是均勻的。 [讀這裏](http://stackoverflow.com/questions/359494/javascript-vs-does-it-matter-which-equal-operator-i-use) – rlemon

+0

@rlemon我認爲你實際上只是證明它的工作原理正如預期的那樣,因爲它是在進行字面比較而不是類型比較,所以當使用'=='時應該是真實的,因爲''1''確實是'==''1'。 – Sammaye

+0

是的,但它並不隱含語義(即後來的開發者可能會感到困惑)。 OP應該轉換類型並使用完全相同。 – rlemon

0

試試這個

var intI = 1; 
var stringS = '1'; 

來英迪轉換爲字符串只使用下方。

var intI = 1+"";//now check the type of intI, it would be string