应用于JSON字符串时angular.fromJson和$ scope $ eval之间的区别
查看源代码:
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字符串时是否存在任何问题?