【发布时间】:2020-02-20 22:06:30
【问题描述】:
在一次采访中,我被要求实现键/值对的数据结构,其中键可以是一个对象,我知道这可以使用 ES6 映射,但是它们如何在 Javascript 中的引擎盖下工作,其中键被严格字符串化并且还实现了与哈希表/对象相同的恒定查找时间?
谢谢。
【问题讨论】:
-
我猜 Maps 使用对象的引用作为哈希键。
-
是的,这是有道理的,但是如果更改该引用,那么已经生成的哈希索引将无效?
-
如何更改对象的引用?如果一个对象有不同的引用,它就是一个不同的对象。
-
是的,但是
Map和get/set中使用的键与引用对象属性的键不同。而且这些映射键没有被字符串化。 -
@t.niese 确实如此。这有点术语冲突——在 JS 中,通常“key”指的是对象的属性。一般来说,在谈论地图时,“键”只是用于查找关联值的项目。这变得很混乱,因为普通的 JS 对象 do 以相同的方式使用键,因此键在 JS 中成为“属性名称”的同义词,这是 正确的,因为它们以相同的方式工作用于在良好但不正确的情况下获取值,因为地图通常不会通过其属性在地图中获取值。因此,存在抽象泄漏。
标签: javascript hashtable es6-map