js中的Object对应的数据结构是什么?其逻辑结构与物理结构是什么?
首先 Object 是 ES 定义的,ES 并没有规定你需要用什么底层数据结构,因此这个问题无解。
我假设你想问的是 V8 对于 Object 是怎么做的,对应什么数据结构,我们继续往下分析。
Object 是阉割版的 哈希表,以下是解释。
我们先看下哈希表的定义。
散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存储存位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。
因此 Object 对应阉割版的哈希表, 更好一点哈希表应该是 Map,但是 Map 实际上有序的,因此更新 Java 的 SortedHashMap 。 Object 之所以说是阉割,指的是:
因此他可能有一些问题。比如:
const a = new Map() a.get('toString') // undefined const b = {} b.toString // f toString() { [native code]}
由于原型链的影响,对象属性查找存在原型链的查找,因此可能会有性能损耗,而 Map 则不会。
因此 Object 是一个不正经的哈希表。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(1)
首先 Object 是 ES 定义的,ES 并没有规定你需要用什么底层数据结构,因此这个问题无解。
我假设你想问的是 V8 对于 Object 是怎么做的,对应什么数据结构,我们继续往下分析。
Object 是阉割版的 哈希表,以下是解释。
我们先看下哈希表的定义。
哈希表
散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存储存位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。
我的解释
因此 Object 对应阉割版的哈希表, 更好一点哈希表应该是 Map,但是 Map 实际上有序的,因此更新 Java 的 SortedHashMap 。 Object 之所以说是阉割,指的是:
因此他可能有一些问题。比如:
由于原型链的影响,对象属性查找存在原型链的查找,因此可能会有性能损耗,而 Map 则不会。
因此 Object 是一个不正经的哈希表。
参考