我会稍微采用另一种方式。
2) Dictionary Elements
哈希表数组会是什么样子?
JavaScript对象是从字符串到值的映射。例如:
var obj = {
"name": "Sherlock Holmes",
"address": "221B Baker Street"
}
V8使用哈希表来表示对象,除非使用了优化的表示方法处理特殊情况。这很像字典使用(单词, 意义)对的方式。
现在,哈希表访问速度很慢,因为最初哈希表中所有键和值都是undefined
。插入新键值对时,计算哈希值并将其插入到插入索引处。如果该索引处已经有一个键,则尝试在下一个位置插入,以此类推。
1)Fast Elements
线性存储数组会是什么样子?
在V8中,element
是一个其键为非负整数(0,1,2等)的属性,即一个简单的线性数组,可以通过数字索引访问其属性。
快速元素存储在一个连续的数组中,例如:
var arr = [1, 2, 3];
它们是一种特殊情况,经过优化以实现更快的访问,因为索引已知且不需要计算。
3)为了预防措施,我怎样才能从一个类型翻转到另一个类型?
对于快速元素,如果您分配的索引远远超出元素数组的末尾,V8可能会将元素降级为字典模式。
参考:http://jayconrod.com/posts/52/a-tour-of-v8-object-representation