如何在JavaScript中创建哈希或字典对象

如何在JavaScript中创建哈希或字典对象,javascript,dictionary,Javascript,Dictionary,我想用javascript创建一个映射对象。我的想法如下: var a = new Array(); a["key1"] = "value1"; a["key2"] = "value2"; 但是,我如何才能找到某个特定的键是否存在呢?使用中的操作符:例如,中的“key1”如果需要命名键,请使用普通对象 if( a['desiredKey'] !== undefined ) { // it exists } var a = {}; a["key1"] = "value1"; a["

我想用javascript创建一个映射对象。我的想法如下:

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

但是,我如何才能找到某个特定的键是否存在呢?

使用中的
操作符:例如,
中的
“key1”

如果需要命名键,请使用普通对象

if( a['desiredKey'] !== undefined )
{
   // it exists
}
var a = {};
a["key1"] = "value1";
a["key2"] = "value2";
然后:


您要创建的是对象,而不是数组

这样,

var Map = {};

Map['key1'] = 'value1';
Map['key2'] = 'value2';
您可以通过多种方式检查密钥是否存在:

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

内置的映射类型现在可以在JavaScript中使用。可以使用它,而不是简单地使用对象。所有主要浏览器的当前版本都支持它

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

var m=newmap();
var key1=‘key1’;
var-key2={};
var-key3={};
m、 设置(键1,‘值1’);
m、 设置(键2,‘值2’);
断言(m.has(key2),“m应该包含key2”);

断言(!m.has(key3),“m不应包含key3”)键可能存在,但具有未定义的值。此
映射[键]!=空和映射[键]!=未定义的
是不可靠的,不应该使用(更重要的是:它是完全错误的)。在什么意义上是完全错误的。。。它正在检查一个值是否为null或未定义,这取决于他想做什么,这可能会有所帮助:\…一个值可以是
null
undefined
,这并不意味着该属性不存在。另外,
undefined
可以在JavaScript中重新定义(试试!),所以我永远不会依赖它。如果你重新定义
undefined
,你应该得到它所导致的任何错误。null表示故意的非值,而undefined表示未初始化的变量。仅仅因为
null==undefined
将返回true,并不意味着null与undefined完全相同;未定义=真;x、 键1=未定义;x、 键1==未定义;/*true*/x.key1==true;/*true*/typeof x.key1==“未定义”/*false*/
如何在“a”中稍后按下新键。push({“key3”,“value3”})会工作吗?push是一个数组方法,这里有一个普通对象。修改对象的时间没有限制,可以使用与答案相同的语法:
a[“key3”]=“value3”语法可以缩短为
vara={'key1':'value1','key2':'value2'}
如何使用key删除元素?@DushyantBangal
dela[“key1”]
dela.key1
您应该小心,因为这是一项“实验性技术,ECMAScript 6(和谐)方案的一部分”someMap.set(key,val)不起作用nodejs@sports你说得对,Node.js在默认情况下并没有启用很多更新的功能(现在!). 如果您设置了
节点--harmony
标志,它将被启用,并且在IO.js中默认情况下被启用。@Ghashange该提案已经标准化,并且在所有浏览器的当前版本中都受支持。:)Map
速度非常慢,甚至无法获取属性,而且,正如您所说,它的接口与普通javascript对象完全不兼容。例如,您不能使用
a[key]
Object.keys()
。我不建议使用它。
Map.hasOwnProperty(key);
Map[key] != undefined // For illustration // Edit, remove null check
if (key in Map) ...