var dict = []; // create an empty array
dict.push({
key: "keyName",
value: "the value"
});
// repeat this last part as needed to add more key/value pairs
기본적으로 두 속성 ( key
및 value
)을 사용하여 객체 리터럴을 만들고을 사용 push()
하여 배열에 삽입합니다 .
편집 : 거의 5 년 후,이 대답은 "일반적인"JS 객체 리터럴 (일명 해시, 일명 사전)을 생성하지 않기 때문에 다운 투표를 받고 있습니다.
이 되어 있지만 OP가 요구되는 구조 생성 (그리고 이는 연결된 다른 문제에 도시)이며, 오브젝트 리터럴 배열 각각, key
및 value
특성. 왜 그 구조가 필요한지 묻지 말고 요청한 구조입니다.
그러나 OP가 요청한 구조가 아닌 일반 JS 객체에서 원하는 것이 있으면 tcll 's answer를 참조하십시오 . 유효한 JS 이름 인 간단한 키만 있으면 대괄호 표기법이 약간 번거 롭습니다. 당신은 이것을 할 수 있습니다 :
// object literal with properties
var dict = {
key1: "value1",
key2: "value2"
// etc.
};
또는 객체를 만든 후 일반 점 표기법을 사용하여 속성을 설정하십시오.
// empty object literal with properties added afterward
var dict = {};
dict.key1 = "value1";
dict.key2 = "value2";
// etc.
당신은 할 당신이 그런 그들에 공백, 특수 문자, 또는 일이 키를 가지고있는 경우 브래킷 표기법을합니다. 예 :
var dict = {};
// this obviously won't work
dict.some invalid key (for multiple reasons) = "value1";
// but this will
dict["some invalid key (for multiple reasons)"] = "value1";
키가 동적 인 경우 대괄호 표기법도 필요합니다.
dict[firstName + " " + lastName] = "some value";
키 (속성 이름)는 항상 문자열이며 키로 사용될 때 문자열이 아닌 값은 문자열로 강제 변환됩니다. 예를 들어 Date
객체는 문자열 표현으로 변환됩니다.
dict[new Date] = "today's value";
console.log(dict);
// => {
// "Sat Nov 04 2016 16:15:31 GMT-0700 (PDT)": "today's value"
// }
그러나 많은 객체가 "[object Object]"
고유하지 않은 키를 만들지 않는 것과 같은 문자열 표현을 갖기 때문에 반드시 "작동하는" 것은 아닙니다. 따라서 다음과 같은 것에주의하십시오.
var objA = { a: 23 },
objB = { b: 42 };
dict[objA] = "value for objA";
dict[objB] = "value for objB";
console.log(dict);
// => { "[object Object]": "value for objB" }
완전히 다르고 고유 한 요소 임에도 불구 objA
하고 objB
둘 다 동일한 기본 문자열 표현을 갖습니다 "[object Object]"
.
프로토 타입 에 기본 문자열 표현을 재정의 하는 사용자 지정 메서드 가 있기 때문에 Date
이러한 동작이 발생하지 않습니다 . 그리고 당신도 똑같이 할 수 있습니다 :Date
toString
// a simple constructor with a toString prototypal method
function Foo() {
this.myRandomNumber = Math.random() * 1000 | 0;
}
Foo.prototype.toString = function () {
return "Foo instance #" + this.myRandomNumber;
};
dict[new Foo] = "some value";
console.log(dict);
// => {
// "Foo instance #712": "some value"
// }
(위의 난수를 사용하기 때문에 이름 충돌은 여전히 매우 쉽게 발생할 수 있습니다. 구현은 단지 설명입니다 toString
.)
따라서 객체를 키로 사용하려고 할 때 JS는 객체 자체 toString
구현을 사용하거나 기본 문자열 표현을 사용합니다.