Javascript:访问Hashtable的键的属性

时间:2012-03-28 08:52:26

标签: javascript

我想使用哈希表作为图形库的一些对象的集合,以便我可以通过说set.remove(v2)之类的东西来快速删除这些对象。

但是当我尝试迭代集合时,我似乎无法使用这些对象,因为键没有正确的属性,即使==显示它们是相同的对象!

如何迭代集合并使用属于键的属性或函数?

下面显示的测试用例,结果相当出乎意料(对我而言)!

v1={'a':2,'b':3};
set={};
set[v1]=true;

// Access the object within set
var v2; for(var k in set) v2=k;

// At this moment, v2 and v1 should be the same object, but...

console.log(v2==v1);    // returns true
console.log(JSON.stringify(v1)); // returns {"a":2,"b":3}
console.log(JSON.stringify(v2)); // returns "[object Object]"   !!!
console.log(v1.a);  // returns 2
console.log(v2.a);  // causes error 'reference to undefined property v2.a' !!!

1 个答案:

答案 0 :(得分:1)

您正在尝试将对象设置为另一个对象的键,这在当前的ECMAScript实现中是不可能的。当您致电set[v1]=true;时,引擎会在内部将v1转换为字符串,结果为"[object Object]",且没有可识别的属性。

ECMAScript 6允许您使用WeakMap将对象映射到其他值,但API仍处于早期阶段,目前仅在Chrome中提供 - 使用命令行开关和Firefox。