如何通过d8深入分析对象
作者:Annan
更新于:1 分钟前
字数统计:363 字
阅读时长:1 分钟
阅读量:
为了更深入理解JavaScript中的对象,需要安装d8(V8调试工具)
https://blog.csdn.net/qq_33925054/article/details/128583038
https://time.geekbang.org/column/article/219418
创建文件test.js
JavaScript
obj = { "second":2, 2: "b", 1: "a", "first": 1 };
%DebugPrint(obj);
执行命令 d8 --allow-natives-syntax test.js
https://gist.github.com/kevincennis/0cd2138c78a07412ef21
—allow-natives-syntax
的含义是允许调用V8内部调试方法。通过%DebugPrint()
这种方式我们可以看到相对于控制台memory内存快照中更深度的信息。
JavaScript
DebugPrint:
0x3c9d0010b481: [JS_OBJECT_TYPE]
- map: 0x3c9d0025a4dd <Map[20](HOLEY_ELEMENTS)> [FastProperties] `隐藏类`
- prototype: 0x3c9d00244a09 <Object map = 0x3c9d002440c5>
- elements: 0x3c9d0010b4b1 <FixedArray[20]> [HOLEY_ELEMENTS]
- properties: 0x3c9d000022a9 <FixedArray[0]>
- All own properties (excluding elements): { `命名属性`
0x3c9d00007591: [String] in ReadOnlySpace: #second: 2 (const data field 0), location: in-object
0x3c9d00005755: [String] in ReadOnlySpace: #first: 1 (const data field 1), location: in-object
}
- elements: 0x3c9d0010b4b1 <FixedArray[20]> { `可索引属性`
0: 0x3c9d000022fd <the_hole>
1: 0x3c9d00004a4d <String[1]: #a>
2: 0x3c9d00004a5d <String[1]: #b>
3-19: 0x3c9d000022fd <the_hole>
}
0x3c9d0025a4dd: [Map] in OldSpace `垃圾回收相关-老生代`
- type: JS_OBJECT_TYPE
- instance size: 20
- inobject properties: 2 `对象内属性数量`
- elements kind: HOLEY_ELEMENTS
- enum length: invalid
- back pointer: 0x3c9d0025a495 <Map[20](HOLEY_ELEMENTS)> `transition tree上指针`
- instance descriptors (own) #2: 0x3c9d0010b509 <DescriptorArray[2]> `描述符数组`
- prototype: 0x3c9d00244a09 <Object map = 0x3c9d002440c5> `原型`
- constructor: 0x3c9d002445cd <JSFunction Object (sfi = 0x3c9d00217d3d)> `构造者`
- dependent code: 0x3c9d000022b9 <Other `heap` object (WEAK_ARRAY_LIST_TYPE)> `存放位置`
可以看到通过d8我们可以看到隐藏类、命名属性、可索引属性、垃圾回收相关内容。