意外的令牌:你的JSON.parse()问题

时间:2014-04-22 13:55:06

标签: javascript json angularjs token

我在网上看过,意外的令牌问题可能来自于使用JSON.parse()。在我的iPhone 5上没有问题,但在我的Nexus 7上,我得到了一系列错误:

enter image description here View large

我意识到这是重复的,但我不知道如何解决这个问题。这是我实现JSON.parse()

的地方
 $scope.fav = []; 

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

4 个答案:

答案 0 :(得分:19)

根据您更新的问题,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"]);
}

答案 1 :(得分:12)

避免错误的一种方法(不是真正修复它,但至少不会破坏):

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

由于localStorage["fav"]undefined,您收到该错误。

试试这个,你自己就能理解:

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

答案 2 :(得分:4)

Unexpected token: u几乎总是源于尝试解析undefined的值。

你可以这样防范:

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

答案 3 :(得分:0)

在我的情况下,问题是我得到的值为localStorage.getItem[key],而它应该是localStorage.getItem(key)

上述答案已经更好地解释了其余的和通常面临的问题。