Почему это вызывает бесконечный цикл в Chrome? - PullRequest
1 голос
/ 25 марта 2011

Это может быть глупый вопрос, но почему нижеследующий цикл for входит в бесконечный цикл в 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 ]

8 голосов
/ 25 марта 2011

Это потому, что вы сравниваете его со строковым представлением undefined, а не с самим undefined:

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

Таким образом, у вас есть две опции, вы можете

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

или

2) localStorage['asdf'] != undefined

5 голосов
/ 25 марта 2011

localStorage[this.config.localStoragePrefix + i] != 'undefined' всегда возвращает истину, поскольку вы сравниваете с неопределенной строкой.Измените на undefined примитив или протестируйте, используя typeof

2 голосов
/ 25 марта 2011
for(var o in localStorage) if (localStorage[o]) this.config.appCount++;
2 голосов
/ 25 марта 2011

это потому, что 'undefined' отличается от undefined: P

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...