javascript - Javascript - 当我在数组中创建一个元素时会发生什么
问题描述
我可以像这样在数组边界之外的任意索引处插入一个值。
> const a = []
undefined
> a[999] = true
true
> a
[ <999 empty items>, true ]
我怀疑 v8 并没有在后台创建 999 个空项目,并且 Arrays 更像 Objects 工作,相反我们正在创建一个隐藏类,它有一个键,它是999
offset的键0
。这个对吗?
解决方案
来自https://v8.dev/blog/fast-properties
数组[]
和对象{}
都是 JSObject。
不同之处在于数组索引项填充elements
存储。添加数组索引属性不会创建新的 HiddenClass。
在像 v8 这样的稀疏数组arr[9999] = 'foo'
中,在“字典模式”中创建一个“自定义描述符”,以避免创建 10k 个空条目造成的内存浪费。字典模式下的数组操作将比连续数组慢得多。
推荐阅读
- azure - 如何使用 ARM TEMPLATE 为 Azure 文件同步注册服务器
- go - 如何向 SonarQube 添加多个测试报告
- c# - 最大化窗口窗体时如何使进度条位置同步?
- sql - 如何在 knex 中进行过滤后进行过滤
- python - 如何使用 Python 中的套接字编程从文件夹同时发送多个文件
- c# - 在 REST API 客户端中使用 GET 时引发错误
- botframework - 将应用程序的设置放在 Microsoft 团队中的哪个位置
- html - 如何对齐包含不同长度文本的 div 内的爆头?
- javascript - elasticsearch地理位置排名
- python - 如何使用 Gmail API 阻止发件人?