2010-07-20 4 views
1

자바 스크립트를 사용하고 있습니다.자바 스크립트에서 기존 객체의 '색인'으로 문자열 변수의 값을 사용합니다.

나는이

var myobj = { 
       "one": { 
         "name" : "paul", 
         "no" : "A123" 
       }, 
       "two": { 
         "name" : "mike", 
         "no" : "B456" 
       }, 
       "three": { 
         "name" : "andy", 
         "no" : "C789" 
       }, 
}; 

I가 다른 객체 나는 '지수'로 newIndex를 사용 myobj

var newIndex = "four"; 
var newItem = { 
       "name" : "leo", 
       "no" : "D987" 
       }; 

가 어떻게 newItem를 삽입 할 삽입 할 newitem? 그런데

, newIndex은 그래서 난 그냥 대신 값의 인덱스로 단어 '와 newIndex'를 사용하기 때문에 myobj.four = newItem; myobj.newIndex = newItem이 작동하지 않는 말할 수 없어에 의해 생성되지 않습니다.

통찰력이 있으십니까?

답변

7

브래킷 표기 속성 접근 사용

myobj[newIndex] = newItem; 

당신이 이름이 유효한 식별자가 아닌 특성, 예를 정의 할 때 유용합니다 :

obj["1foo"] = "bar"; // `obj.1for` will cause a SyntaxError 
obj["a b"] = "bar"; // `obj.a b` will cause a SyntaxError 

참고 당신이 할 수있는 이 속성 접근자를 사용하는 표현식을 사용하십시오. 예 :

obj[someFunc()] = "foo"; 

e 대괄호 사이의 표현식은 JavaScript에 true 해시 테이블이 없기 때문에 결과를 string으로 변환하며 속성 이름은 String 유형이어야합니다.

상세 정보 : 키워드로 명명 된 또는 예약 된 속성을 참조 할 때 자바 스크립트 기반이되는 표준의 최신 버전으로, 그것은 브래킷 표기법을 사용할 필요가 없습니다 있다는

+0

주 단어 : 'obj.for ='me '는 ECMAScript 5 판에서 허용됩니다. (객체 리터럴의 속성 이름과 같은 몇 가지 다른 컨텍스트도 키워드를 허용하기 위해 느슨해졌습니다.)이 변경 사항은 Firefox에서 구현되었습니다. –

+0

@Jeff, 네, ES5에서'IdentifierName'을'.' 속성 접근 자와 함께 사용할 수 있습니다. 나는 더 좋은 예를 만들거야 ... – CMS

관련 문제