JSON文字列に適用した場合のangular.fromJsonと$scope.$evalの違い 質問する

JSON文字列に適用した場合のangular.fromJsonと$scope.$evalの違い 質問する

angular.fromJson私の AngularJS アプリでは、通常、次のようにを使用して JSON 文字列を解析します。

var myObject=angular.fromJSON(jsonString);

ただし、以下を使用しても同じ結果が得られるようです$scope.$eval:

var myObject=$scope.$eval(jsonString);

このバイオリンを見てください

または、次のように、Vanilla JavaScript を使用します。

var myObject=JSON.parse(jsonString);
  • angular.fromJSONではなくを使用する特別な理由があるのでしょうかJSON.parse?

  • $scope.$evalJSON 文字列を解析するために使用する場合、何か問題が発生する可能性がありますか?

ベストアンサー1

チェックしてくださいソースコード:

function fromJson(json) {
  return isString(json)
      ? JSON.parse(json)
      : json;
}

彼らはただ通過しているだけですJSON.parse

はどうかと言うと$評価それは$パース:

  // $scope.$eval source:
  $eval: function(expr, locals) {
    return $parse(expr)(this, locals);
  },

$parseソースは長すぎて投稿できませんが、基本的にはインライン(文字列化された)オブジェクトを本物オブジェクトなので、この場合は JSON も実際に変換されるのは当然です。

(今 $parse ソースを読むまで、このことは知りませんでした。)

JSON.parse ではなく angular.fromJSON を使用する特別な理由はありますか?

いいえ、そうではありません。ただし、次のように JSON 文字列を二重に解析しないようにチェックは行われます。

var jsonString = '{"foo":"bar"}';
var json = JSON.parse(jsonString); // Parsing once is good :)
JSON.parse(json); // Parsing twice is bad :(

$scope.$eval を使用して JSON 文字列を解析するときに、問題が発生する可能性はありますか?

すぐに思いつく限りでは、必要以上の作業を行っているということ以外は、そうは思えません。したがって、JSON があることがわかっている場合は、より重い $parse 関数を使用する理由はありません。

おすすめ記事