【问题标题】:Unexpected token: u JSON.parse() issue意外令牌:u JSON.parse() 问题
【发布时间】:2014-06-06 22:46:22
【问题描述】:

我在网上看到意外的令牌问题可能来自使用 JSON.parse()。在我的 iPhone 5 上没有问题,但在我的 Nexus 7 上却出现以下错误序列:

View large

我意识到这是重复的,但我不确定如何针对我的具体问题解决这个问题。这是我实现 JSON.parse() 的地方

 $scope.fav = []; 

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

【问题讨论】:

  • 我会说一个好的第一步是console.log(localStorage["fav"]),看看在 Nexus 上能给你带来什么
  • 能否在JSON.parse 之前显示console.log(typeof localStorage["fav"]); 和console.log(typeof JSON.stringify($scope.fav)); 的输出。它不应该是undefined,但localStorage(例如数据太大)或JSON.stringify 可能存在问题。 Unexpected token u 表示它是undefined
  • addToFav 函数仅在单击按钮时被调用。这些按钮不会出现在 Nexus 上,而只会出现在 iPhone 上。我应该在那里看到输出吗?
  • 由于您的 Nexus 上没有调用 addToFav,因此错误很可能发生在另一个地方,您确定您发布的代码就是错误发生的地方吗?还是我误解了你的评论?如果那里没有错误,那么显示 iPhone 的输出就没有任何意义。
  • @t.niese 抱歉,问题出现在错误的地方。我已经用设备加载时调用的代码更新了这个问题。现在回想起来,我认为主要问题是由 JSON.parse(localStorage["fav"]);没有任何价值,因为这是我第一次在这个 Nexus 上加载应用程序。在此之前,数据一直存储在 iPhone 上。我认为“未定义”一词在这里是不正确的,因为它是之前定义的。

标签: javascript json angularjs token


【解决方案1】:

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

【讨论】:

  • 您好,谢谢。这就是我正在寻找的解决方案。我只做这个测试以确保如果 fav 有以前的值,那么它们在每次加载时都保持在那里。
  • 我刚刚在我的代码中遇到了一个类似的错误。检查 typeof "undefined" 和 string "undefined" 是我的解决方案。确定如何设置“未定义”是另一个错误 :) 谢谢 t.niese!
【解决方案2】:

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

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

您收到该错误是因为 localStorage["fav"] 是 undefined。

试试这个,你自己就明白了:

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

【讨论】:

  • if ($scope.fav !== 'undefined') 是无用的,因为对于给定的代码,$scope.fav 永远不会是 "undefined"。所以要么删除它,只使用localStorage["fav"] || '{}',要么将测试移到if条件。
  • 好吧,我只是在修复中断的一行,而不是他的整个代码 :)
  • 但是你是对的,我应该提供一个干净的代码作为例子。更改完成:)
【解决方案3】:

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

你可以这样防范:

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

【讨论】:

    【解决方案4】:

    就我而言,问题是我得到的值是localStorage.getItem[key],而它应该是localStorage.getItem(key)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-29
      • 2014-12-07
      • 1970-01-01
      • 1970-01-01
      • 2014-12-04
      • 2016-12-12
      • 1970-01-01
      • 2017-10-13
      相关资源
      最近更新 更多