web-dev-qa-db-ja.com

予期しないトークン:u JSON.parse()の問題

JSON.parse()を使用すると、予期しないトークンの問題が発生する可能性があることをオンラインで読みました。 iPhone 5では問題ありませんが、Nexus 7では次のエラーシーケンスが発生します。

enter image description here 拡大表示

私はこれが重複していることを認識していますが、特定の問題に対してこれを解決する方法がわかりません。ここにJSON.parse()を実装します

 $scope.fav = []; 

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

更新された質問に基づいて、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"]);
}
20
t.niese

エラーを回避する1つの方法(実際には修正しませんが、少なくとも壊れません):

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

localStorage["fav"]undefinedです。

これを試してみて、あなたはすべて自分で理解するでしょう:

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

Unexpected token: uは、ほとんどの場合、undefinedである値を解析しようとすることに起因します。

次のようにそれを防ぐことができます:

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

私の場合、問題はlocalStorage.getItem(key)であったはずの値をlocalStorage.getItem[key]として取得していたことでした。

残りの問題と通常直面する問題は、上記の回答によってすでによりよく説明されています。

0
Black Mamba