2012-09-26 55 views
6

我轉換和使用如何比較兩個字符串值爲整數?

if (parseInt(x)!=parseInt(y)) { 

的問題是,如果值是x="9"y="09"測試返回false比較兩個字符串值。

我該如何解決這個問題?

+0

Btw .:'9'和'09'被認爲相等,因爲'09'不是八進制的有效數字,因此被解釋爲小數。 – poke

+0

真的嗎? FF將其解析爲零。 – spender

+0

@spender我也使用Firefox;現在在Web控制檯,便箋簿,Firebug和JSTerm中進行測試。同樣的結果,'09 == 9'。 – poke

回答

13

使用此:

if(parseInt(x, 10)!=parseInt(y, 10)) 

如果沒有精確的基數, 「09」 被解析爲八進制(這給出0)。

MDN documentation about parseInt

注意八進制表示工作時,你甚至不應該依靠這種解釋:

的ECMAScript 5中移除了八解讀

功能的的ECMAScript 5規範parseInt不再使用 允許實現將字符串從0字符 開始視爲八進制值。 ECMAScript 5指出:

parseInt函數產生一個整數值,該值由 指定,根據 指定的基數解釋字符串參數的內容。字符串中的空白空間被忽略。如果基數爲 未定義或爲0,則假定爲10,除非數字從字符對0x或0X開始 ,在這種情況下,假定基數爲16的小數點爲 。如果基數爲16,數字也可以選擇以 字符對0x或0X開頭。

這不同於ECMAScript 3,它不鼓勵,但允許解釋八進制 。

由於許多實現從2011年開始尚未採用此行爲,因此必須支持舊版瀏覽器,因此請始終指定一個基數。

簡單:

始終指定基數

+3

+1,但它被解析爲八進制,而不是十六進制。 –

+0

@JamesAllardice你是對的(當你有0x時它是六進制) –

+0

此外,'9 == 0x09' ... –

3

您需要explicitelly到10集的基數,否則假定它是8(JavaScript的壞零件):

parseInt(x,10) 

http://www.w3schools.com/jsref/jsref_parseint.asp

如果字符串以「0」開頭,則基數爲8(八進制)。此功能是 已棄用