각.json과 $scope의 차이.$eval을 JSON 문자열에 적용할 경우
angularjs 앱에서는 주로 JSON 문자열을 파싱합니다.angular.fromJson
, 다음과 같습니다.
var myObject=angular.fromJSON(jsonString);
하지만 사용하면 같은 결과를 얻을 수 있을 것 같습니다.$scope.$eval
:
var myObject=$scope.$eval(jsonString);
또는 바닐라 자바스크립트를 사용하여 다음과 같이 할 수 있습니다.
var myObject=JSON.parse(jsonString);
사용해야 할 특별한 이유가 있습니까?
angular.fromJSON
보다는JSON.parse
?사용할 때 발생할 수 있는 문제가 있습니까?
$scope.$eval
JSON 문자열 파싱?
소스 코드를 확인합니다.
function fromJson(json) {
return isString(json)
? JSON.parse(json)
: json;
}
그들은 그냥 지나쳐 가는 중입니다.JSON.parse
.
$evaluate에 관해서는 $parse에 해당합니다.
// $scope.$eval source:
$eval: function(expr, locals) {
return $parse(expr)(this, locals);
},
$parse 소스는 게시하기에 너무 길지만 인라인(스트링된) 개체를 실제 개체로 변환할 수 있으므로 이 경우 실제로 JSON도 변환할 수 있습니다.
(나는 방금 $parse 소스를 읽기 전까지 이것을 몰랐습니다.)
JSON.parse가 아닌 JSON에서 angular.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 기능을 사용할 이유가 없습니다.
위의 답변은 거의 정확합니다.그러나 를 사용하는 데 잠재적인 문제가 있습니다.$scope.$eval()
JSON 문자열을 구문 분석합니다. JSON 문자열은 둘 중 하나와 함께 존재하지 않습니다.JSON.parse()
아니면angular.fromJson()
: 담보의Angular는 함수 호출, 조건을 포함한 복잡한 자바스크립트를 포함하는 표현을 허용합니다.?:
, 가변 과제 등등.이 모든 것은 다음을 사용할 경우 인식되고 처리됩니다.$scope.$eval()
, 악의적인 최종 사용자에 의해 추가되었다고 해도 말입니다.
JSON은 더 복잡한 자바스크립트 기능을 지원하지 않으며, 잠재적으로 "위험한" 기능도 지원하지 않습니다.만약 당신이 진정한 JSON 파서를 사용한다면,JSON.parse()
아니면angular.fromJson()
, 악성코드가 주입되고 실행될 가능성은 없습니다.
Angular 식들이 분리되어 전류에서만 평가되기 때문에$scope
, 코드 주입의 위험이 다소 완화됨 -$scope.$eval()
자바스크립트의 네이티브보다 훨씬 덜 위험합니다.eval()
JSON 파싱에 사용할 수 있습니다.그러나 잠재적인 보안 위험이 있고 적절한 JSON 파서를 사용하는 것이 더 빠를 수 있기 때문에 이 목적을 위해 두 가지 기능을 사용할 이유는 여전히 없습니다.
언급URL : https://stackoverflow.com/questions/29243854/difference-between-angular-fromjson-and-scope-eval-when-applied-to-json-string
'programing' 카테고리의 다른 글
CSS로 점멸/점멸 문자를 만드는 방법 3 (0) | 2023.10.30 |
---|---|
각도 변환을 사용하여 번역을 표시하는 방법은 무엇입니까? (0) | 2023.10.30 |
MySQL FULL JOIN? (0) | 2023.10.30 |
css 내용 다음 또는 내용 이전에 의사:"를 회전합니다." (0) | 2023.10.30 |
html 요소에 대한 onclick 이벤트에 대한 data-* 특성 가져오기 (0) | 2023.10.30 |