2011-03-25 162 views
1

這可能是一個愚蠢的問題,但爲什麼下面的循環在Chrome中進入無限循環,而不是在Firefox中? (顯然,循環測試就是它失敗的地方 - 我只是不知道爲什麼)。爲什麼這會在Chrome中導致無限循環?

for(var i = 0; localStorage[this.config.localStoragePrefix + i] != 'undefined'; i++) 
    this.config.appCount++; 

它正在檢查存在多少localStorage元素。例如:

localStorage['myPrefix_0'] 
localStorage['myPrefix_1'] 
localStorage['myPrefix_2'] ... 

將返回3.

爲什麼這永遠循環在Chrome中有什麼想法?

+0

你不能只用'localStorage.length'任何理由嗎? – 2011-03-25 17:00:42

+3

當您刪除「未定義」的引號時會發生什麼? ''undefined'!= undefined'。 – mway 2011-03-25 17:00:51

回答

8

這是因爲你比較它的未定義字符串表示,而不是不確定的本身:

localStorage['asdf'] 
>>undefined 
localStorage['asdf'] == undefined 
>>true 
localStorage['asdf'] == 'undefined' 
>>false 

所以,你有兩個選擇,你可以

1)typeof localStorage['asdf'] != "undefined"

2)localStorage['asdf'] != undefined

+0

你說得對。明鏡。 – doremi 2011-03-25 17:03:52

5

localStorage[this.config.localStoragePrefix + i] != 'undefined'總是返回true,因爲您正在比較'undefined'字符串。更改爲到undefined原始或使用typeof

2

這是因爲「未定義」是不同的,那麼未定義測試:P

2
for(var o in localStorage) if (localStorage[o]) this.config.appCount++; 
+0

解釋這裏發生了什麼? – doremi 2011-03-25 17:03:14

+0

現在它是有道理的。 – doremi 2011-03-25 17:05:10

+0

類別。這取決於localStorage是什麼類型的對象。有可能我的代碼會計算函數和其他東西......您可能需要驗證測試 – mplungjan 2011-03-25 17:11:05

相關問題