제 웹 응용 프로그램에서 jquery를 사용하고 있습니다. 여기서 우리는 아래의 eval 메소드를 사용합니다.자바 스크립트 평가 메소드 구문
var json = eval('(' + data + ')');
Google 검색 후 위의 eval 메서드가 json 데이터를 javascript 개체로 변환하는 것으로 나타났습니다. 그러나 그 구문은 무엇을 의미합니까? 왜 ('(' ')') 괄호 안에 들어가야 만 하는가? 이해를 도와주세요.
제 웹 응용 프로그램에서 jquery를 사용하고 있습니다. 여기서 우리는 아래의 eval 메소드를 사용합니다.자바 스크립트 평가 메소드 구문
var json = eval('(' + data + ')');
Google 검색 후 위의 eval 메서드가 json 데이터를 javascript 개체로 변환하는 것으로 나타났습니다. 그러나 그 구문은 무엇을 의미합니까? 왜 ('(' ')') 괄호 안에 들어가야 만 하는가? 이해를 도와주세요.
사용 ()
데이터가 {}
가 블록으로 구문 분석하는 방지하기위한 것입니다 둘러싸.
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);
또는 일부 라이브러리 기능을 대신 사용하십시오.
'{a : 1}'은 (는) 유효한 JSON이 아닙니다. 이것은 실제로 블럭에서 빈 표현 '1'에 대한 레이블 'a'로 파싱됩니다. –
이것은 문자열을 대괄호로 묶어야하는 이유에 대한 정답입니다. 비록 : JSON.parse는 IE <9를 제외하고 사용해야한다. (JSON을 지원하지 않는다.) $ .parseJSON (data);는 X-browser이고, jQuery를 이미 사용하고 있기 때문에 왜 후자를 사용하지 않을까요? –
@CristiMihai 네, 맞습니다. – xdazz
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.
jQuery와 다른 점은 - [이 질문 (http://stackoverflow.com/questions/4935632/how-to-parse-json-in-javascript)을 참조하십시오. –
"우리는 아래의 평가 방법을 사용합니다." ... ** WHY? ** – Incognito