当我运行以下代码时:
fake_key = new Set([{v: 1, w: 2}])
fake_memo = {};
fake_memo[fake_key] = 2;
fake_key = new Set([{v: 5, w: 5}])
fake_memo[fake_key] = 5;
然后打印或记录fake_memo
,我希望看到:
{ '[object Set]': 2, '[object Set]': 5 }
相反,我得到:
{ '[object Set]': 5 }
就好像我插入对象映射中的第一个对象被第二个对象破坏了。
为什么会出现这种情况?如何恢复我想要的行为(两个键都插入到 map 中)?
最佳答案
普通对象的属性键始终是字符串。您的集合正在转换为字符串,它始终给出字符串“[object Set]”
。
您可以使用 Map 实例而不是普通对象,因为 Map 键可以是任何类型的值。为此,请制作 map :
fake_memo = new Map();
然后
fake_memo.set(fake_key, 2);
等等。使用
var value = fake_memo.get(some_key);
检索值。
您可以在 Map 实例上使用普通的 [ ]
操作,但这仍会将 Map 视为普通对象。
关于javascript - JavaScript 是否允许为对象字段设置键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51846362/