Difference between angular.fromJson and $scope.$eval when applied to JSON string

后端 未结 2 1472
粉色の甜心
粉色の甜心 2020-12-15 04:48

In my angularjs apps, I usually parse a JSON string by using angular.fromJson, like so:

var myObject=angular.fromJSON(jsonString);
2条回答
  •  春和景丽
    2020-12-15 05:29

    Check out the source code:

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

    They're just passing through to JSON.parse.

    As for $eval it shells out to $parse:

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

    $parse source is too long to post, but it is essentially capable of converting inline (stringified) objects to real Objects and so it makes sense that in this case, it will actually convert your JSON as well.

    (I did not know this until reading through the $parse source just now.)

    Is there any particular reason to use angular.fromJSON rather than JSON.parse?

    Nope, not really. Although they do check to you to ensure that you don't double-parse a JSON string, like so:

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

    Is there any possible issue when using $scope.$eval to parse a JSON string?

    I don't think so off the top of my head, other than that you're doing more work than is necessary. So if you know you have JSON, there's no reason to use the heavier $parse function.

提交回复
热议问题