gpt4 book ai didi

javascript - 有人可以帮助描述 Javascript 中的两种数组存储类型吗?

转载 作者:可可西里 更新时间:2023-11-01 02:06:11 26 4
gpt4 key购买 nike

我正在 HTML5Rocks 上阅读这篇关于 V8 的文章.这篇文章很旧,但我几乎看不懂,这让我很困扰。我一次执行这 1 个步骤,但有人可以帮助我处理数组部分吗?

文章指出:

Arrays

In order to handle large and sparse arrays, there are two types ofarray storage internally:

  • Fast Elements: linear storage for compact key sets

  • Dictionary Elements: hash table storage otherwise

It's best not to cause the array storage to flip from one type toanother.

问题:

Fast Elements 线性存储阵列会是什么样子?

Dictionary Elements 哈希表数组会是什么样子?

出于预防目的,我如何“从一种类型转换为另一种类型”

最佳答案

我会换个方向。

2) Dictionary Elements 哈希表数组会是什么样子?

JavaScript 对象是从字符串到值的映射。例如

var obj = {
"name": "Sherlock Holmes",
"address": "221B Baker Street"
}

V8 使用哈希表来表示对象,除非使用针对特殊情况 的优化表示。这很像字典使用(词、义)对。

现在,此哈希表访问速度很慢,因为最初哈希表中的所有键和值都是未定义。在插入新对时,计算哈希值并将该对插入到插入索引处。如果该索引处已经有一个键,请尝试在下一个索引处插入,依此类推。

1) Fast Elements 线性存储阵列会是什么样子?

在 V8 中,元素 是一个属性,其键是一个非负整数(0、1、2、...),即一个简单的线性数组,其可以通过数字索引访问属性。

快速元素存储在一个连续的数组中。例如

var arr = [1, 2, 3];

它们是特例,优化了更快的访问,因为索引是已知的,不需要计算。

3) 出于预防目的,我将如何从一种类型转换为另一种类型

对于快速元素,如果您分配的索引远远超过元素数组的末尾,V8 可能会将元素降级为字典模式。

引用:http://jayconrod.com/posts/52/a-tour-of-v8-object-representation

关于javascript - 有人可以帮助描述 Javascript 中的两种数组存储类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40734359/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com