Localstorage & JSON.parse: если значение отсутствует, JS перестает работать? - PullRequest
2 голосов
/ 14 ноября 2011

Извините, если название почему-то недоразумение.У меня возникают некоторые проблемы с веб-приложением, если я пытаюсь проанализировать значения из локального хранилища, используя json, и нет никаких значений, ничего не работает.

Например:

Если вы сделаете это: alert(localStorage.getItem("something"));, вы получите ноль: http://jsfiddle.net/yrGht/

, но если вы сделаете это, он заблокирует все: alert(JSON.parse(localStorage["test"])); вы получитеничего, и это останавливает все от работы: http://jsfiddle.net/7tCaS/

Как я могу решить эту проблему, чтобы я сначала предупредил, и если это не имеет значения, то продолжаю работать, потому что в основном я хочу установить это: JSON.parse(localStorage["test"]) какглобальная переменная, но она блокирует все остальное: http://jsfiddle.net/gq9Ea/

Ответы [ 2 ]

5 голосов
/ 14 ноября 2011

Попробуйте:

alert(JSON.parse(localStorage['test'] || null));

Причина, по которой он не работает, заключается в том, что JSON.parse(undefined_variable) выдает ошибку "недопустимый символ"Если localStorage['test'] не существует, это undefined, поэтому он получает ошибку.Приведенный выше код помещает null на место, если значение ложно, то есть undefined.Однако это имеет плохие последствия, если значение равно 0, "" или другому ложному значению.Если нужен более конкретный код, попробуйте:

alert(JSON.parse(typeof localStorage['test'] == "undefined" ? null : localStorage['test']));
2 голосов
/ 14 ноября 2011

При использовании localStorage вы должны предвидеть в своем коде, что данные могут отсутствовать, и вам нужно проверить это условие и обработать его каким-либо образом.Самый простой способ сделать это будет примерно так:

var rawData = localStorage.getItem("something");
var parsedData = {};  // set whatever the default value should be if there is no localStorage value
if (rawData) {
    parsedData = JSON.parse(rawData);
}

Вы также можете использовать обработку исключений:

var parsedData;
try {
    parsedData = JSON.parse(localStorage.getItem("something"));
} catch(e) {
    parsedData = {};    // set default value if localStorage parsing failed
}

Кроме того, вы должны научиться видеть ошибки в JavaScriptконсоль ошибок браузера или консоль отладчика.Javascript не был «заблокирован».Он выдал ошибку, которая не была обработана, поэтому выполнение было прервано.Эта ошибка (как номер строки, так и тип ошибки) была зарегистрирована как в консоли ошибок, так и в консоли отладчика, чтобы вы могли ее увидеть.

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