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
基本上,您将创建具有2个属性(称为key
和value
)的对象文字,并将其(使用push()
)插入数组中。
编辑:差不多5年后,这个答案开始被人们否决了,因为它没有创建一个“正常的” JS对象文字(aka地图,aka哈希,aka字典)。但是,
它正在创建OP要求的结构(在另一个链接的问题中对此进行了说明),该结构是一组对象常量,每个对象都有key
和value
属性。不要问我为什么需要这种结构,但这是所要求的。
但是,但是,如果您想要一个普通的JS对象(而不是 OP所要求的结构),请参阅tcll的答案,尽管如果括号中的数字只是有效的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
实现(如果有)或使用默认的字符串表示形式。