项目开发中,在某个功能实现时,用对象作为对象的key,简化为下面的例子:
let a = { a: 1 } let b = {}; b[a] = "ttt"; console.log(b); let d = { q: "bbq" }; b[d] = 999; console.log("=========================="); console.log(b);
输出:
可以看到新增的ket value会覆盖掉旧的,导致对象b永远只有一对键值,这是为什么?
======================= 分 割 线 =========================
查这个问题的时候搜到一个挺不错的文章:JavaScript系列---对象基于哈希存储(<key,value>之Key篇)
里面作者分析了对象的key在使用非字符串(比如数字)时,js默认将非字符串类型的key使用toString()方法进行类型转换,楼下几位同学的回答也说明了这点,因此上面的例子出现永远只会有一对键值,是因为对象使用toString()方法的结果只会等于'[object Object]'这个字符串值,也就是永远只有一个Key,所以不论value如何变化,只会存在一对键值,而对象转字符串,其实就是我们常用的JSON.stringify()。。。如下图。。
======================= 我 是 第 两 条 分 割 线 =========================
回复中提到的symbol楼主是今天才知道的。。。惭愧惭愧,查了下,确实可以,如下图:
这篇文章对symbol的使用解释的挺不错的:理解和使用ES6中的Symbol
另外Map也是可以的, Map
感谢各位同学的回复!