这可能是一个愚蠢的问题,但为什么下面的循环在Chrome中进入无限循环但在Firefox中却没有? (显然,循环测试是它失败的地方 - 我只是不知道为什么)。
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 :(得分:8)
这是因为您将它与未定义的字符串表示形式进行比较,而不是将其自身进行比较:
localStorage['asdf']
>>undefined
localStorage['asdf'] == undefined
>>true
localStorage['asdf'] == 'undefined'
>>false
所以你有两个选择,你可以
1)typeof localStorage['asdf'] != "undefined"
或
2)localStorage['asdf'] != undefined
答案 1 :(得分:5)
localStorage[this.config.localStoragePrefix + i] != 'undefined'
总是返回true,因为你要比较'undefined'字符串。更改为undefined
原语或使用typeof
答案 2 :(得分:2)
这是因为'undefined'与undefined不同:P
答案 3 :(得分:2)
for(var o in localStorage) if (localStorage[o]) this.config.appCount++;