我想使用哈希表作为图形库的一些对象的集合,以便我可以通过说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' !!!
答案 0 :(得分:1)
您正在尝试将对象设置为另一个对象的键,这在当前的ECMAScript实现中是不可能的。当您致电set[v1]=true;
时,引擎会在内部将v1
转换为字符串,结果为"[object Object]"
,且没有可识别的属性。
ECMAScript 6允许您使用WeakMap
将对象映射到其他值,但API仍处于早期阶段,目前仅在Chrome中提供 - 使用命令行开关和Firefox。