js数据结构

js中的Object对应的数据结构是什么?其逻辑结构与物理结构是什么?

阅读 1.6k
1 个回答

首先 Object 是 ES 定义的,ES 并没有规定你需要用什么底层数据结构,因此这个问题无解。

我假设你想问的是 V8 对于 Object 是怎么做的,对应什么数据结构,我们继续往下分析。

Object 是阉割版的 哈希表,以下是解释。

我们先看下哈希表的定义。

哈希表

散列表Hash table,也叫哈希表),是根据(Key)而直接访问在内存储存位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表

我的解释

因此 Object 对应阉割版的哈希表, 更好一点哈希表应该是 Map,但是 Map 实际上有序的,因此更新 Java 的 SortedHashMap 。 Object 之所以说是阉割,指的是:

  • 其 key 只支持 字符串,如果不是字符串会被转化为字符串。
  • 其不纯粹, 不是一个正经的哈希表。

因此他可能有一些问题。比如:

const a = new Map()
a.get('toString') // undefined
const b = {}
b.toString // f toString() { [native code]}

由于原型链的影响,对象属性查找存在原型链的查找,因此可能会有性能损耗,而 Map 则不会。

因此 Object 是一个不正经的哈希表。

参考

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题