2012-09-02 5 views
0

제 웹 응용 프로그램에서 jquery를 사용하고 있습니다. 여기서 우리는 아래의 eval 메소드를 사용합니다.자바 스크립트 평가 메소드 구문

var json = eval('(' + data + ')'); 

Google 검색 후 위의 eval 메서드가 json 데이터를 javascript 개체로 변환하는 것으로 나타났습니다. 그러나 그 구문은 무엇을 의미합니까? 왜 ('(' ')') 괄호 안에 들어가야 만 하는가? 이해를 도와주세요.

+1

"우리는 아래의 평가 방법을 사용합니다." ... ** WHY? ** – Incognito

답변

2

사용 () 데이터가 {}가 블록으로 구문 분석하는 방지하기위한 것입니다 둘러싸.

var json = eval('{}'); // the result is undefined 
var json = eval('({})'); // the result is the empty object. 

var json = eval('{"a": 1}'); // syntax error 
var json = eval('({"a": 1})'); // the result is object: {a: 1} 

하지만 당신은 eval는 JSON 데이터를 구문 분석하는 데 사용할 수 없습니다.

var json = JSON.parse(data); 또는 일부 라이브러리 기능을 대신 사용하십시오.

+1

'{a : 1}'은 (는) 유효한 JSON이 아닙니다. 이것은 실제로 블럭에서 빈 표현 '1'에 대한 레이블 'a'로 파싱됩니다. –

+0

이것은 문자열을 대괄호로 묶어야하는 이유에 대한 정답입니다. 비록 : JSON.parse는 IE <9를 제외하고 사용해야한다. (JSON을 지원하지 않는다.) $ .parseJSON (data);는 X-browser이고, jQuery를 이미 사용하고 있기 때문에 왜 후자를 사용하지 않을까요? –

+0

@CristiMihai 네, 맞습니다. – xdazz

2

eval을 사용하여 json을 구문 분석하지 마십시오. jQuery를 사용하고 있으므로 $.parseJSON(data)을 사용하십시오. 데이터에 window.close()이 포함되면 어떻게 될까요? 괄호에

WRT, 당신은 douglas crockford's json2.js에서 그들을 설명하는 주석을 볼 수

// In the third stage we use the eval function to compile the text into a 
// JavaScript structure. The '{' operator is subject to a syntactic ambiguity 
// in JavaScript: it can begin a block or an object literal. We wrap the text 
// in parens to eliminate the ambiguity. 
+1

jQuery와 다른 점은 - [이 질문 (http://stackoverflow.com/questions/4935632/how-to-parse-json-in-javascript)을 참조하십시오. –