在引擎盖下,是Javascript对象哈希表
Under the hood, are Javascript objects hash tables?
我想知道在Javascript引擎(V8,Spidermonkey等)中如何在引擎盖下实现对象。它们真的只是哈希表吗? 如果是这样,他们如何处理碰撞?
首先,对于不同的JS引擎,答案可能有些不同。 另外,我假设您专门询问财产存储;显然,对象也有一堆其他状态(原型链链接是一个明显的状态)。
在 Spidermonkey 的情况下,对象基本上有一个(propname,关于属性的信息)对的链表,直到它们有太多的属性,当我相信它们仍然保留链表(因为顺序对于 JS 中的属性在实践中很重要)但添加一个带外哈希表,将属性名称映射到链表中的条目。
切换到哈希表可能还有其他原因;随着时间的推移,细节还没有完全修复,将来可能会发生变化。
链表和哈希表实际上是在对象之间共享的;只要两个对象具有相同的属性名称和相应的属性信息(对于具有存储值的属性,不包括值)并且属性按相同的顺序设置,它们就能够共享属性链表。
当需要存储这些值时,实际的属性值存储在对象的数组中(或者更准确地说,两个数组;一个与对象内联分配,其大小在对象创建时是固定的,另一个动态分配并根据以后添加的属性调整大小)。
可以将
对象视为关联数组(又名map,字典,哈希,查找表)。此数组中的键是对象属性的名称。
我在MDN上找到了这个
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_accessors
在JS数组中,关联数组和对象也是相同的。在JS中,数组基本上是具有序列号属性的对象。
相关文章:
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 循环遍历以数组为值的Javascript对象
- 从ajax请求中获取javascript对象
- 如何从对象的原型方法访问JavaScript对象属性
- 将XML转换为普通的旧JavaScript对象
- 通过引用传递JavaScript对象
- javascript对象操作:根据指定条件选择属性
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- 如何在异步函数中使用javascript对象
- 临时Javascript对象
- 如何在ASP中为用户控件添加Javascript对象网
- 使用数组向下搜索Javascript对象
- Rails将JavaScript对象存储到Model的有效方式
- JavaScript对象不是从原型链继承的
- 如何创建具有默认值的JavaScript对象字段?(AngularJS模型相关)
- SetInterval在javascript对象中表现怪异
- Javascript 对象和 this 关键字
- 如何在不知道关键字的情况下访问javascript对象值
- 在 JavaScript 对象中设置要使用的运算符的属性
- 如何搜索JavaScript对象并更改值