2014-05-20 50 views
0

隨着下面的代碼使一個localStorage的變量與報價= 1的鍵如果沒有定義它。但是,如果使用相同的引用鍵最終再次調用它,即使使用Number()函數,它也會變爲11而不是2。localStorage的返回11上的localStorage [鍵] + = 1

if (typeof localStorage[quote] == "undefined") { 
    localStorage[quote] = Number(1); 
} else { 
    localStorage[quote] += Number(1); 
} 

alert(localStorage[quote]); 

任何想法?

回答

3

聽起來就像是圍繞檢索變成 「11」 不是11裹parseInt函數()或Number():每下面的評論

localStorage[quote] = Number(localStorage[quote]) + 1; 

編輯。

從MDN(重點煤礦):

https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage

描述DOM存儲機制是一種通過串 鍵/值對能夠可靠地儲存和隨後使用

檢索的手段
+0

大,非常感謝前爲int。 – benjipelletier

+2

'數字(1)'是不必要的,可以只是'1'。 – dfsq

+0

@dfsq我同意,但您不知道用戶代碼的其餘部分是什麼......這可能是一致或正確的事情。 – mrk

3

因爲字符串的localStorage存儲。 typeof window.localStorage.getItem(quote); //「string」;

因此, 「1」 + 1 = 「11」。

你需要轉換爲數字,如果你想存儲數量。

希望對大家有所幫助

2

+是數字(兩個數字),以及連接運算符字符串(字符串連接兩字符串之一)的運營商,這取決於操作數的類型

在你的情況下,localStorage [key]將總是返回一個字符串,所以將使用連接運算符。而"1" + 1 == "11"

因此,你應該檢索值轉換使用+操作上

localStorage[quote] = parseInt(localStorage[quote], 10) + 1;