对象内部原始值(primitive value)的实际存储位置问询
JavaScript对象中原始值属性的存储位置
拿你给出的代码举例:
const foo = { firstName: 'bar' }
主流JS引擎(比如V8)的处理逻辑是这样的:
- 对象
foo作为引用类型,整体存储在堆内存中,因为引用类型需要动态分配内存空间。 - 原始值
'bar'(字符串属于原始值)并不会存在栈内存里,而是存在堆内存的字符串池(V8的字符串驻留机制)中,对象foo的firstName属性会直接持有这个字符串在堆中的引用。
补充一点:JS里的栈内存主要用来存放执行上下文、局部变量的引用等,原始值不管是作为对象属性还是局部变量,本质上都是存在堆里的——栈里只会存局部原始值的副本,但对象属性对应的原始值,肯定是存在堆里,属性本身存的是它的堆内存引用。
内容的提问来源于stack exchange,提问作者Yousef Dawood
相关产品推荐
相关产品推荐

