1

我只是想在一個循環中使用這個if語句不工作,但由於某種原因,我無法弄清楚它是不工作的Javascript>運營商擴展

chrome.storage.sync.get({ 
    probeAmount: '1' 
}, function(items) { 
    probeavailable = document.getElementById("probeValue").innerHTML; 
    console.log(probeavailable); 
    console.log(items.probeAmount); 
    if(probeavailable > items.probeAmount) { 
     //code 
    } 
    else { 
     //something else 
    } 
}); 

console.log(probeavailable)的記錄號碼14console.log(items.probeAmount)記錄號碼3,但If語句每次轉發到else部分。

有沒有人有一個想法,爲什麼這可能是?

+1

「14」> 「3」 返回false。將其轉換爲int。 – Hatsjoem 2014-10-19 09:45:39

+0

你確定它們是你認爲它們的數據類型嗎?嘗試'typeof probeavailable'和'typeof items.probeAmount'。 – 2014-10-19 09:46:23

+1

有些事情要提。 'chrome.storage' API與HTML'localStorage'不同,它可以即時進行JSON轉換。因此,對於數字值,將其作爲數字進行存儲更有意義,即「{probeAmount:1}」 – Xan 2014-10-19 11:30:23

回答

0

我的猜測是,他們不是143(數字),他們是"14""3"(字符串,這是肯定的probeavailable真的,但我不知道其他的一個)。 14 > 3爲true,但"14" > "3"(字符串比較)爲false。嘗試把一個+在他們每個人的面前,迫使他們是數字:

if(+probeavailable > +items.probeAmount) { 

...或者,如果其中一方是用戶輸入,使用parseInt用適當的基數:

if(parseInt(probeavailable, 10) > parseInt(items.probeAmount, 10)) { 
+0

完美。迫使他們成爲一個數字正是我所需要的。我沒有得到的是爲什麼它不會工作,因爲以前這工作得很好。有點愚蠢我不檢查他們是否是字符串。謝謝 – 2014-10-19 09:50:52

+1

@RicoClark:在某些情況下,他們可以比較正確,但並非所有情況都可以正常工作,就像您發現的那樣。這可能是它最初看起來「工作」的原因。 – 2014-10-19 10:12:31

0

使用

if(parseInt(probeavailable) > parseInt(items.probeAmount)) { 

代替