따옴표와 따옴표가없는 객체 키의 차이점은 무엇입니까?


209

차이점이 있습니까?

obj = {'foo': 'bar'} 

obj = {foo: 'bar'}

-따옴표를 사용하지 않으면 키에 사용할 수 없습니다 . 그러나 실제로 차이가 있습니까? 그렇다면 어느 것입니까?

답변:


136

아니요, 따옴표는 차이가 없습니다 (명시한 바와 같이 유효한 JavaScript 식별자가 아닌 키를 사용하려는 경우 제외).

참고로 JSON 데이터 교환 형식 식별자 주위에 큰 따옴표 필요하며 작은 따옴표는 허용 하지 않습니다 .


88
실제로 숫자 리터럴을 속성 이름으로 사용하면 따옴표 차이를 만들 수 있습니다 . 예를 들어와 obj = { 12e34: true };같지 않습니다 obj = { '12e34': true };. 전자는을 통해 호텔에 액세스해야 obj['1.2e+35']하지만 후자는을 (를) 사용 obj['12e34']합니다. 자세한 내용은 내 답변을 참조하십시오.
Mathias Bynens

1
사실이지만 az 첫 문자 + 영숫자에서 큰 따옴표를 선택적으로 사용할 수 있고 공백 팬 또는 탭이 아닌 공백 팬이있을 수 있습니까? 깊이 중첩되지 않은 데이터에 적합합니다.
Jason Sebring

124

에서 인용 부호가 속성 이름 / 자바 스크립트 객체 키 , 내 쓰기까지 주제에 :

속성 이름이 숫자 리터럴이거나 유효한 식별자 이름 인 경우에만 따옴표를 생략 할 수 있습니다 .

[…]

모든 속성 이름에 대괄호 표기법을 안전하게 사용할 수 있습니다.

[…]

점 표기법은 속성 이름이 유효한 식별자 이름 인 경우 에만 사용할 수 있습니다 .

예약어는 ES5에서 따옴표없는 속성 이름으로 사용할 수 있습니다. 그러나 ES3와의 하위 호환성을 위해 어쨌든 인용하는 것이 좋습니다.

또한 주어진 속성 이름을 따옴표없이 사용하거나 점 표기법으로 사용할 수 있는지 알려주는 도구를 만들었습니다. mothereff.in/js-properties 에서 사용해보십시오 .

스크린 샷


이 도구는 생명의 은인이었습니다. 이것을 게시 해 주셔서 감사합니다.
Chris Christensen 's

나는 절벽에서 내리는 도중에, 가파른 경사를 넘어서서, 완전히, 피의 죽음을 향해 도망 쳤다. 그러나 아아, 나는 당신의 대답에 링크를 클릭했는데, 그것은 매우 간단한 JS 도구를 가지고있어서 절벽에서 떨어지지 못하게했습니다. 이 도구는 생명의 은인이었습니다.
Andrew

8

여기에는 차이가 없습니다. 스타일의 문제입니다. 이렇게하는 이유 중 하나는 예약 된 키워드이므로 '슈퍼'또는 '클래스'를 키로 사용할 수 있기 때문입니다.

어떤 사람들은 공백이있는 문자열을 전달하고 싶을 때 o [ 'whitespace를 가질 수 있습니다']를 부를 수 있습니다. 그러나 나는 그 나쁜 연습을 부를 것입니다.


3

아니요, 자바 스크립트가 아닙니다. 그러나 키 주위에 따옴표가 없으면 일부 JSON 파서가 실패합니다.


35
따옴표가없는 키는 JSON에서 유효하지 않습니다.
Ned Batchelder

1

상황이 다른 경우도 있습니다. 예를 들어, jQuery를 사용 중이고 jQuery $ () 명령을 호출하여 요소를 작성할 때 전달할 매개 변수 목록을 작성하는 경우 인용 된 단어는 매개 변수로, 인용되지 않은 단어는 함수로 변환됩니다. 예를 들어, "size"는 객체의 크기 속성을 설정하고 size (따옴표 없음)는 객체에서 size () 함수를 호출합니다. 하단 근처의 jQuery ()를 참조하십시오 .

두 번째 인수는 편리하지만 유연성으로 인해 의도하지 않은 결과 (예 : $ ( " <input>", {size : "4"})가 발생하여 size 속성을 설정하는 대신 .size () 메서드를 호출 할 수 있음)가 발생할 수 있습니다 . 따라서 이전 코드 블록은 다음과 같이 작성 될 수 있습니다.


나는 그 예가 당신이 생각하는 것을 말하는 것으로 생각하지 않습니다. 인용 한 문제는 jQuery에 size라는 메소드가 있고 메소드 크기를 선택하여 메소드 크기와 속성 크기 사이의 충돌이 해결되기 때문입니다. jQuery에는 을 문자열 또는 다른 유형으로 전달하면 동작이 변경되지만 인용 부호가 아닌 인용 부호로 유효한 등록 정보 이름을 가진 등록 정보를 정의하지 않는 경우가 있습니다.
Alex Weitzer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.