Use:
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
and value
)并插入它(使用push()
) 进入数组。
这不会创建“正常”JavaScript 对象文字(又名地图、又名散列、又名字典)。
它is然而,创建OP要求的结构(并在另一个链接的问题中说明),这是对象文字数组,每个都有key
and value
特性。不要问我为什么需要这种结构,但这是我们所要求的。
但是,但是,如果你想要一个普通的 JavaScript 对象 - 并且notOP要求的结构-参见tcl 的回答,尽管如果您只有作为有效 JavaScript 名称的简单键,那么括号表示法有点麻烦。你可以这样做:
// 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.
You do如果您的键中含有空格、特殊字符或类似内容,则需要括号符号。例如:
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" }
Despite objA
and 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
.)
因此,当尝试使用对象作为键时,JavaScript 将使用该对象自己的toString
实现(如果有)或使用默认字符串表示形式。