我在网上读到意外的令牌“u”问题可能是由于使用JSON.parse()造成的。我的iPhone 5没有问题,但我的Nexus 7上出现了一系列错误:
我意识到这是重复的问题,但我不确定如何解决我的具体问题。以下是我实现JSON.parse()的地方。
$scope.fav = [];
if ($scope.fav !== 'undefined') {
$scope.fav = JSON.parse(localStorage["fav"]);
}
我在网上读到意外的令牌“u”问题可能是由于使用JSON.parse()造成的。我的iPhone 5没有问题,但我的Nexus 7上出现了一系列错误:
我意识到这是重复的问题,但我不确定如何解决我的具体问题。以下是我实现JSON.parse()的地方。
$scope.fav = [];
if ($scope.fav !== 'undefined') {
$scope.fav = JSON.parse(localStorage["fav"]);
}
根据您更新后的问题,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);
$scope.fav
从未为 "undefined"
,那么 if ($scope.fav !== 'undefined')
就是无用的。因此,要么将其删除并仅使用 localStorage["fav"] || '{}'
,要么将测试移动到 if
条件中。 - t.nieseUnexpected token: u
几乎总是由于尝试解析一个值为 undefined
的情况而产生。
您可以使用以下方式防范:
if (localStorage['fav']) {
$scope.fav = JSON.parse(localStorage['fav'];
}
localStorage.getItem[key]
,而应该是localStorage.getItem(key)
。
console.log(localStorage["fav"])
,然后看看在 Nexus 上它给了你什么。 - ivarniJSON.parse
之前展示一下console.log(typeof localStorage["fav"]);
和console.log(typeof JSON.stringify($scope.fav));
的输出吗?它们不应该是undefined
,但可能存在localStorage
(例如数据过大)或JSON.stringify
的问题。Unexpected token u
表示它是undefined
。 - t.nieseaddToFav
,因此错误很可能发生在另一个地方,您确定您发布的代码是出错的代码吗?或者我误解了您的评论?如果那里没有错误,显示iPhone的输出将没有意义。 - t.niese