js数据结构

发布于 2022-09-11 16:53:00 字数 42 浏览 13 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一腔孤↑勇 2022-09-18 16:53:00

首先 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 是一个不正经的哈希表。

参考

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文