如何在 JavaScript 中创建散列或字典对象

我想用 javascript 创建一个 map 对象:

 var a = new Array();
a["key1"] = "value1";
a["key2"] = "value2";

但是我怎么才能找到一个特定的键是否存在呢?

259807 次浏览
if( a['desiredKey'] !== undefined )
{
// it exists
}

使用 in操作符: 例如 "key1" in a

如果想要命名键,不要使用数组,使用普通对象。

var a = {};
a["key1"] = "value1";
a["key2"] = "value2";

然后:

if ("key1" in a) {
// something
} else {
// something else
}

您希望创建对象,而不是数组。

像这样,

var Map = {};


Map['key1'] = 'value1';
Map['key2'] = 'value2';

您可以通过多种方式检查密钥是否存在:

Map.hasOwnProperty(key);
Map[key] != undefined // For illustration // Edit, remove null check
if (key in Map) ...

内置的 Map 类型现在可以在 JavaScript 中使用。可以使用它而不仅仅使用 Object。所有主流浏览器的当前版本都支持它。

映射不支持 Object 使用的 [subscript]表示法。该语法将 subscript值隐式强制转换为基元字符串或符号。映射支持任何值作为键,因此必须使用方法 .get(key).set(key, value).has(key)

var m = new Map();
var key1 = 'key1';
var key2 = {};
var key3 = {};


m.set(key1, 'value1');
m.set(key2, 'value2');


console.assert(m.has(key2), "m should contain key2.");
console.assert(!m.has(key3), "m should not contain key3.");

对象只支持将基本字符串和符号作为键,因为这些值存储为属性。如果使用 Object,它将无法区分 key2key3,因为它们的字符串表示形式是相同的:

var o = new Object();
var key1 = 'key1';
var key2 = {};
var key3 = {};


o[key1] = 'value1';
o[key2] = 'value2';


console.assert(o.hasOwnProperty(key2), "o should contain key2.");
console.assert(!o.hasOwnProperty(key3), "o should not contain key3."); // Fails!

相关资料