栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

js的数组/对象在内存中分别是如何存储的?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

js的数组/对象在内存中分别是如何存储的?

Javascript的对象是以一个描述ID、一个内容指针、以及跟随该对象的属性进行储存的。

当对象构造简单时,内容指针并不起作用,而所有属性直接跟在对象的内存地址之后。

比如对象

{a: 1, b: 2}
,若其内存地址为0x1000,则该对象在内存中为

0x10000x10080x10100x1018描述ID指针(空)ab

不同于大多数语言,该指针指向的地址是同时向左右两个方向进行储存该对象的属性。由于这种对称的特性,很多人将Javascript的内容指针称之为蝴蝶(Butterfly)。

当对象类型复杂时,比如对象包含7个以上的属性,那么butterfly就会起到作用
比如对象

{a: 1, b: 2, c: 3, d: 4, e: 5, f: 6, g: 7}
,若其内存地址为0x1000,则该对象在内存中为

0x10000x1008描述IDbutterfly

若该butterfly指向

0x8000
,则该地址内存构造大致为:

0x7ff00x7ff80x8000(butterfly)0x80080x80100x80180x80200x8028-gabcdef

而当一个对象为数组时,该数组的butterfly一般为:

0x7ff00x7ff80x8000(butterfly)0x80080x80100x8018-length元素1元素2元素3元素4

如果你给这个数组加一些其他的属性,比如

arr.a = 1; arr.b = 2
,那么该对象的butterfly就会变成

0x7fe00x7fe80x7ff00x7ff80x8000(butterfly)0x80080x80100x8018-balength元素1元素2元素3元素4
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/386223.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号