Javascript 可以将JSON添加到map.set中作为密钥吗?

Javascript 可以将JSON添加到map.set中作为密钥吗?,javascript,Javascript,我想知道是否可以添加JSON作为map.set的键值 将JSON添加为对象效果良好: var theMap = new Map(); var key = {field1 : 'value1', field2: 'value2'}; theMap.set(key, 'foo'); 在集合期间添加JSON不起作用: var theMap = new Map(); theMap.set({field1 : 'value1', field2: 'value2'}, 'bar'); 有人知道这样做是否

我想知道是否可以添加JSON作为map.set的键值

将JSON添加为对象效果良好:

var theMap = new Map();
var key = {field1 : 'value1', field2: 'value2'};
theMap.set(key, 'foo');
在集合期间添加JSON不起作用:

var theMap = new Map();
theMap.set({field1 : 'value1', field2: 'value2'}, 'bar');

有人知道这样做是否可行吗?

首先,您没有使用
JSON
您使用的是对象引用作为键。这对于javascript中的地图数据结构来说是完全合适的。
map
键和值可以包含任何内容,这也是有时选择此数据结构而不是对象(非常相似,也是键值对)的原因之一

在第二个示例中:

var theMap = new Map();
theMap.set({field1 : 'value1', field2: 'value2'}, 'bar');

您正在通过对象文字动态创建对象。然后,您将使用这个创建的对象文本作为值的键(在本例中是字符串
'bar'

使用对象作为
贴图的键时,通过对象标识访问该键。换句话说,您需要使用相同的对象来查找它,而不是使用相同值的对象

考虑:

var theMap=newmap();
设obj={field1:'value1',field2:'value2'}
地图集(对象“条形”);
//你提到了obj
//因此,您可以使用get访问该值
console.log(映射获取(obj))
//但是如果你这样做
theMap.set({field1:'value1',field2:'value2'},'foo');
//无法使用'obj'获取foo,因为它们具有相同的键和值
//并不意味着它们是同一个对象:
log(“对象是否相同?”,obj=={field1:'value1',field2:'value2'})
//在地图中设置值仍然有效。
//只有两个不同的对象作为键

console.log(“keys:”,…theMap.keys())
您不是在添加JSON,而是在添加对象。第二种方法也可以,但毫无用处,因为您没有保留对该对象的引用。为什么半数程序员使用JSON这个词来表示它不是的东西?我不明白。有没有一些著名的网站把他们混淆成这个术语的错误用法?请阅读以了解JSON实际上是什么。我刚刚在Chrome开发控制台中试用了它,它是双向的。你能澄清一下你的意图吗?这样我们就可以更容易地提出一种可能的选择。“对象将被垃圾收集”:如果它是
weakap
,则将被垃圾收集,但在
Map
中,除非不再引用
Map
本身,否则不会被垃圾收集。有趣的是,谢谢。我使用不同的对象进行了测试,但是使用相同的数据,您是对的,它不匹配。我正试图弄明白这样的事情是如何做到的,而不必把一个字符串串在一起作为键。
var theMap = new Map();
theMap.set({field1 : 'value1', field2: 'value2'}, 'bar');