我轉換和使用如何比較兩個字符串值爲整數?
if (parseInt(x)!=parseInt(y)) {
的問題是,如果值是x="9"
和y="09"
測試返回false
比較兩個字符串值。
我該如何解決這個問題?
我轉換和使用如何比較兩個字符串值爲整數?
if (parseInt(x)!=parseInt(y)) {
的問題是,如果值是x="9"
和y="09"
測試返回false
比較兩個字符串值。
我該如何解決這個問題?
使用此:
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年開始尚未採用此行爲,因此必須支持舊版瀏覽器,因此請始終指定一個基數。
簡單:
始終指定基數
+1,但它被解析爲八進制,而不是十六進制。 –
@JamesAllardice你是對的(當你有0x時它是六進制) –
此外,'9 == 0x09' ... –
您需要explicitelly到10集的基數,否則假定它是8(JavaScript的壞零件):
parseInt(x,10)
http://www.w3schools.com/jsref/jsref_parseint.asp
如果字符串以「0」開頭,則基數爲8(八進制)。此功能是 已棄用
Btw .:'9'和'09'被認爲相等,因爲'09'不是八進制的有效數字,因此被解釋爲小數。 – poke
真的嗎? FF將其解析爲零。 – spender
@spender我也使用Firefox;現在在Web控制檯,便箋簿,Firebug和JSTerm中進行測試。同樣的結果,'09 == 9'。 – poke