2009-04-07 2 views
6

대부분의 JSON 시리얼 라이저/디시리얼라이저에서 자바 스크립트 사전/해시 배열의 "키"부분은 문자열로 기록됩니다.JS 해시/사전의 "핵심"부분이 문자열이어야하는 이유는 무엇입니까?

의도 한 이름을 입력하는 대신 문자열을 키로 사용하면 어떤 이점이 있습니까? 그래서 키가 될 가지고있는 점은 무엇

alert(k1 == k2);     // false (of course) 

alert(k1.a == k2.a);    // true 
alert(k1["b"] == k2["b"]);   // true 

alert(uneval(k1));     // returns the k1 object literal notation. 
alert(uneval(k2));     // returns the same string as above line. 

alert(uneval(k1) == uneval(k2)); // true 

:

var k1 = { a: 1, b: 2, c: 3 };   // define name normally 
var k2 = { "a": 1, "b": 2, "c": 3 }; // define name with a string 

내가 다음 테스트를 실행 : 예를 들어

, 나는 두 개체 k1 등 같은 k2를 정의하는 말 방법이 k1 정의 된대로 키 이름을 입력하는 대신 k2이 정의 된대로 큰 따옴표 (문자열)를 정의 했습니까? 그는 또한 tabIndex를 위해 낙타 케이스를 사용하기 때문에

chromium.tabs.createTab({ 
"url": "http://www.google.com/", 
"selected": true, 
"tabIndex": 3 
}); 

, 나는 모든 문자열을 사용하여 어떤 지점이 표시되지 않는 :


난 그냥 Aaron Boodman's blog entry를 가리키는 Ajaxian에서이 이상을 보았다.

왜 :

chromium.tabs.createTab({ 
url: "http://www.google.com/", 
selected: true, 
tabIndex: 3 
}); 

왜 JS 닌자가 문자열로 url, selectedtabIndex 회전의 규칙을 따르는 것?

답변

6

JSON은 실제 JavaScript 리터럴 구문의 하위 집합이므로 JSON 구문 분석기 구현의 편의를 위해 문자열 주위에는 항상 큰 따옴표가 필요하며 JSON의 키는 문자열이므로 문자열이 필요합니다.

모든 법적 JavaScript가 합법적 인 JSON은 아닙니다. 자바 스크립트에서 따옴표없이 객체 리터럴을 정의 할 수 있지만 상호 운용이 가능한 JSON을 원한다면 객체를 넣어야합니다.

+0

자바 스크립트의 규칙이 JSON을 많이 사용하는 것으로부터 유출되었다고 가정합니다. – chakrit

+0

파이썬 호환성이 따옴표의 이유로 언급되었습니다. – cobbal

+0

@chakrit 예. 또한 기즈모 (gizmo)가 지적한 바와 같이, 예약어에 대해 걱정할 필요가 없으므로 JavaScript에서 따옴표를 사용하는 것이 일반적으로 안전합니다.예를 들어 {do : "something"}은 합법적 인 JavaScript가 아닙니다. –

1

이렇게하면 오류로 인해 "do"와 같은 javascript 예약 키워드를 사용하지 않아도됩니다. 문자열 표기법을 사용하면 안전한 쪽을 유지할 수 있습니다.

0

json.org의 구문 다이어그램을 믿는 경우 bareword 속성 이름은 비표준입니다. 테스트를 실행 한 브라우저의 수는 얼마입니까?

+0

대단한 것은 아니지만 직장에서 거대한 자바 스크립트 애플리케이션을 유지합니다. 그리고 저는 항상 베어 메드 이름을 사용합니다 (예 : 클래스 만들기 등). 모든 주요 브라우저에서 작동합니다 ... IE FF Opera Safari. – chakrit

+0

JSON은 JavaScript의 하위 집합입니다. 따옴표가 필요하지만 JavaScript는 그렇지 않습니다. –

0

외에 멀리 당신이 실제로 사용할 수있는 키워드에서 점점로부터 속성 이름에서 어떤 문자 - 공백, 콜론 포함 ...

회원님이 그렇게 할 이유 정말 확인합니다. 나는 보통의 "객체"표기법을 사용하는 것을 선호한다.

관련 문제