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"]);
}
エラーを回避する1つの方法(実際には修正しませんが、少なくとも壊れません):
$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]
として取得していたことでした。
残りの問題と通常直面する問題は、上記の回答によってすでによりよく説明されています。