Проверка неопределенного значения не работает? - PullRequest
2 голосов
/ 09 июня 2011

У меня есть следующий код JavaScript:

var currentIds = localStorage.getItem('currentPairsIds');

if ((typeof currentIds === "undefined") ||
    (currentIds == null))
        $.myNameSpace.currentIDs = new Array(3);
    else
        $.myNameSpace.currentIDs = currentIds.Split(',');

Я отлаживаю с помощью Firebug, и хотя currentIds не имеет никакого значения, он всегда выполняет оператор else.

ОБНОВЛЕНИЕ:

Я получаю это значение из хранилища HTML5.

Что я делаю не так?

Ответы [ 5 ]

7 голосов
/ 10 июня 2011

Вот как я решил свою проблему:

var currentIds = localStorage.getItem('currentPairsIds');

if ((currentIds === undefined) ||
    (currentIds == null) || (currentIds == "undefined"))
        $.myNameSpace.currentIDs = new Array(3);
    else
        $.myNameSpace.currentIDs = currentIds.split(',');

localStorage.getItem('currentPairsIds'); возвращает строку "undefined".

В функции Split() есть еще одна ошибка. Правильная версия без заглавной буквы.

2 голосов
/ 09 июня 2011

Я бы использовал прямое сравнение вместо общеизвестно странного оператора "typeof":

if ((currentIds === undefined) || (currentIds === null)) {
  //...
1 голос
/ 09 июня 2011

Это не работает, потому что localStorage.getItem возвращает null, если элемент не определен, он не возвращает undefined http://dev.w3.org/html5/webstorage/#dom-storage-getitem

Пример: http://jsfiddle.net/mendesjuan/Rsu8N/1/

var notStored = localStorage.getItem('ffff');

alert(notStored); // null
alert(typeof notStored); // object, yes, null is an object.

Поэтому вы должны просто тестировать

alert(notStored === null);
0 голосов
/ 09 июня 2011

Я думаю, вы должны сделать проверку для undefined по сравнению с == вместо ===. Пример:

typeof currentIds == "undefined"

Это гарантирует, что переменная действительно не определена или нет.

0 голосов
/ 09 июня 2011

[Редактировать Редактировать Редактировать Редактировать: P]


currentIds = "undefined"

подразумевает

typeof currentIds == "String"

См. Также, Обнаружение не определено, === не требуется для сравнения строк.

...