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()
)数组中.
Edit:差不多5年后,这个答案的票数越来越低,因为它没有创建"普通"的JS对象文字(又称映射、又称散列、又称字典).
然而,它is创建了OP要求的 struct (并在链接到的另一个问题中进行了说明),即an array of object literals,每个都有key
和value
个属性.不要问我为什么需要那个 struct ,但它就是我们要求的那个.
但是,如果你想在一个简单的JS对象中得到什么——以及not OP所要求的 struct ——请参见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"
// }
(请注意,由于上面使用的是random,名称冲突仍然很容易发生.这只是为了说明toString
的实现.)
因此,当试图使用对象作为键时,JS将使用对象自己的toString
实现(如果有的话),或者使用默认的字符串表示.