Неожиданный знак: u JSON.разобрать (вопрос)


Я прочитал в интернете, что неожиданная проблема токена u может возникнуть из-за использования JSON.разбор(). На моем iPhone 5 нет никаких проблем, но на моем Nexus 7 я получаю эту последовательность ошибок:

Вид большой

Я понимаю, что это дубликат, но я не уверен, как решить эту проблему для моей конкретной проблемы. Вот где я использую JSON.parse ()
 $scope.fav = []; 

if ($scope.fav !== 'undefined') {
   $scope.fav = JSON.parse(localStorage["fav"]);
}
4 17

4 ответа:

На основе вашего обновленного вопроса условие if не имеет смысла, потому что вы установили $scope.fav на [] прямо перед этим, поэтому оно никогда не может быть "undefined".

Скорее всего, вы хотите, чтобы ваш тест был таким:

if (typeof localStorage["fav"] !== "undefined") {
  $scope.fav = JSON.parse(localStorage["fav"]);
}

Поскольку я не знаю, существует ли ситуация, когда localStorage["fav"] может содержать строку "undefined", вам, вероятно, также потребуется тест для этого.

if (typeof localStorage["fav"] !== "undefined"
    && localStorage["fav"] !== "undefined") {
  $scope.fav = JSON.parse(localStorage["fav"]);
}

Один из способов избежать ошибки (не совсем исправить ее, но, по крайней мере, не сломать):

$scope.fav = JSON.parse(localStorage["fav"] || '[]');

Вы получаете эту ошибку, потому что localStorage["fav"] - это undefined.

Попробуйте это, и вы все поймете сами:

var a = undefined;
JSON.parse(a);

Unexpected token: u почти всегда происходит от попыток проанализировать значение, которое является undefined.

Вы можете защититься от этого следующим образом:

if (localStorage['fav']) {
  $scope.fav = JSON.parse(localStorage['fav'];
}

В моем случае проблема заключалась в том, что я получал значение как localStorage.getItem[key], тогда как оно должно было быть localStorage.getItem(key).

Остальные и обычно возникающие вопросы были лучше объяснены уже приведенными выше ответами.