为什么这会导致Chrome无限循环?

时间:2011-03-25 16:59:32

标签: javascript html5 for-loop local-storage

这可能是一个愚蠢的问题,但为什么下面的循环在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中永久循环的任何想法?

4 个答案:

答案 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++;