应用于JSON字符串时angular.fromJson和$ scope $ eval之间的区别

科技网编2023-04-06 10:541500

查看源代码:

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

他们只是通过JSON.parse

至于$ eval它炮轰到$ parse:

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

$ parse source太长,无法发布,但是它本质上能够将内联(字符串化)对象转换为 真实 对象,因此在这种情况下,它实际上也会转换JSON是有意义的。

(直到刚刚阅读完$ parse的源代码,我才知道这一点。)

有什么特殊的原因要使用angular.fromJSON而不是JSON.parse吗?

不,不是这样。尽管它们确实会检查您以确保您不对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函数。

解决方法

在我的angularjs应用中,我通常使用来解析JSON字符串angular.fromJson,如下所示:

var myObject=angular.fromJSON(jsonString);

但是,似乎可以通过使用$scope.$eval以下命令获得相同的结果:

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

看到这个小提琴

或使用香草javaScript,如下所示:

var myObject=JSON.parse(jsonString);
  • 有什么特别的理由要使用angular.fromJSON而不是JSON.parse

  • $scope.$eval用于解析JSON字符串时是否存在任何问题?

评论区