2013-07-15 1 views
1

임 (모질라의 개발자 사이트에서) 다음 코드 샘플을 고려할 때 자바 스크립트 객체 리터럴의 구문을 이해하는 몇 가지 문제가 : 자바 스크립트 객체 리터럴의어떻게 자바 스크립트에서 객체 리터럴이 작동합니까?

var car = { manyCars: {a: "Saab", "b": "Jeep"}, 7: "Mazda" }; 

console.log(car.manyCars.b); // Jeep 
console.log(car[7]); // Mazda 

나의 현재 이해는이다 : 당신이 키를주는 경우에, 값 쌍을 가지며 키는 데이터 유형이므로 파이썬 사전과 같이 작동하여 car [key]가 키에 설정 한 값을 반환하도록합니다. 텍스트를 키로 입력하면 키와 연관된 값으로 설정된 'car'변수를 정의합니다. 그러나 위의 경우 "b"은 문자열이지만 "Jeep"으로 설정된 변수 인 것처럼 car.manyCars.b을 호출 할 수 있으며 car.manyCars["b"]"Jeep"을 반환하는 유효한 구문입니다.

분명히 현재의 이해가 완전하지 않기 때문에 누군가가 당신에게 객체 리터럴을 선언 할 때 실제로 일어나는 일에 대한 명확한 설명을 줄 수 있는지 궁금합니다.

+0

보너스 포인트를 얻으려면 누군가가 mozilla의 개발자 페이지 이외의 적절한 자바 스크립트 리소스를 추천 할 수 있고 1000 페이지 길이가 아니라면 고맙겠습니다. – MYV

+0

http://www.amazon.com/gp/aw/d/1847194141 객체 지향 자바 스크립트 - 서적 –

+0

http://javascriptissexy.com/javascript-objects-in-detail/ – LUKE

답변

7

JavaScript에서는 개체 리터럴 표기법의 키가 따옴표로 묶여 있는지 여부에 관계없이 문자열로 처리됩니다. 그런 다음 이렇게하면

var car = { manyCars : {a: "Saab", "b": "Jeep"}, 7: "Mazda" }; 

는 : 따라서이 함께

for (var k in car) { console.log("key: " + k + " (type: " + typeof(k) + ")"); } 

출력은 다음과 같습니다

키 : 7 (유형 : 문자열)
키 manyCars (유형 : 문자열)

(분명히) 숫자 키 y 7string입니다. 자바 스크립트 키워드를 객체 리터럴의 키로 사용할 수도 있습니다.

키를 사용하여 값에 액세스 할 때 규칙이 더 엄격하다는 점에 유의하십시오. 예를 들어 키가 예약어 인 경우 첨자 표기법과 따옴표를 사용해야합니다. 또한 객체 리터럴의 베어 키는 (숫자 리터럴이 아닌 경우) 유효한 JavaScript 식별자 이름이어야하므로 공백, 쉼표 또는 JavaScript 연산자 (+, = 등)를 포함 할 수 없습니다.

0

기본적으로 자바 스크립트의 개체 리터럴은 사전과 매우 유사하게 작동하지만 Java 또는 PHP의 개체 기능도 가지고 있습니다. 개체는 기능 또는 속성 또는 둘 다를 정의 할 수 있습니다. 액세스하려는 키에 따라 따옴표 또는 도트 구문을 사용할 수 있습니다. 일부는 특수 문자를 가질 수 있습니다. 따옴표를 사용하려면 특수 문자가 없으면 점을 사용하십시오. 둘 다 맞습니다.

다음은 생성자에 의한 개체 리터럴 생성과 개체 생성의 차이를 비교하고 대조하는 유용한 리소스입니다.

http://net.tutsplus.com/tutorials/javascript-ajax/the-basics-of-object-oriented-javascript/

는 여기에 또 다른 하나는 자바 스크립트에서

http://javascript.info/tutorial/objects

2

키 - 값 쌍으로 구성된다 리터럴 객체 객체 리터럴의 사용에 깊이 더 많은 것입니다. JavaScript의 키는 항상 문자열이며 값은 모든 데이터 유형이 될 수 있습니다.

JavaScript는 키 정의를위한 통사론을 제공합니다.예를 들어 문자열 리터럴과 달리 키를 인용 할 필요는 없습니다. 따라서, 다음의 두 가지 예는 동일 :

{ x: 0 } // example 1 
{ "x": 0 } // example 2 

그러나 이런 문법적은 그들 사이에 (즉, 공백, 탭, 개행 등) 공백없는 식별자 작동한다. 예를 들어, 다음은 자바 스크립트에 잘못되었습니다

{ "a property": 0 } // valid 

또한 사용할 수 있습니다 부울 (true 또는 false), 숫자 리터럴과 undefined :

{ a property: 0 } // whitespace not allowed in identifiers 

당신이 식별자를 인용하여이 제한을 해결할 수 있습니다 그러나 및 키로 null. 그러나 문자열에 강제로 저장된다는 점을 기억하십시오. 따라서 당신은 할 수 있습니다 :

var o = { 
    undefined: 1, 
    null: 2, 
    true: 3, 
    false: 4, 
    0: 5 
}; 

는 그런 다음으로 액세스 할 수 있습니다 :

alert(o.undefined); // 1 
alert(o.null);  // 2 
alert(o.true);  // 3 
alert(o.false);  // 4 
alert(o[0]);  // 5 

마지막 문장이 중요하다. 숫자 리터럴 자체는 유효한 식별자로 분류되지 않습니다. 따라서 점 표기법 (.) 대신 배열 괄호 표기법 ([])을 사용하여 액세스해야합니다. 자바 스크립트에서 모든 키 이후

은 당신도 할 수있는 문자열입니다

alert(o["undefined"]); // 1 
alert(o["null"]);  // 2 
alert(o["true"]);  // 3 
alert(o["false"]);  // 4 
alert(o["0"]);   // 5 

당신이 키와 객체, 배열 또는 함수를 사용할 수 없습니다 그러나

. 예를 들어 다음은 유효하지 않습니다.

{ {1: 2}: 3 }   // objects can't be used as keys 
{ [1]: 2 }    // arrays can't be used as keys 
{ function() {}: true } // functions can't be used as keys 

그게 당신이 객체 리터럴에 대해 알아야 할 전부입니다.

+1

개체 리터럴의 키는 사실 , 자바 스크립트 예약어. 섹션 [11.1.5] (http://es5.github.io/#x11.1.5) 및 [7.6.1] (http://es5.github.io/#x7.6.1)의 EcmaScript 사양을 참조하십시오. 그것을 시도하십시오). 또한 개체 리터럴 키에 표시 할 수없는 문자 목록은 공백 문자 이상입니다. –

+0

@TedHopp 오, 알았어. 나는 그것을 바로 잡을 것이다. 나는 공백 문자 만이 열쇠에 나타날 수 없다고 결코 말하지 않았다. 나는 공백 문자가 키에 나타날 수 없다고 말했다. 그것은 공간, 개행, 탭 등을 포함합니다. –

+0

다른 공백 문자를 말하는 것이 아닙니다. 스펙에 따르면, 베어 키는 유효한 _IdentifierName_ (반드시 유효한 _Identifier_는 아님), _StringLiteral_ 또는 _NumberLiteral_이어야합니다. 따라서 공백 이외에 객체 리터럴의 베어 키는 쉼표, 콜론, 연산자 (예 :'+','=') 등을 포함 할 수 없습니다. 그러나 숫자 리터럴에는 마침표 또는 '+'기호가 포함될 수 있습니다. {7.3e + 4 : "big"}은 유효한 객체 리터럴입니다. –

관련 문제