首页 > Web开发 > 详细

JS 栈,堆,常量池

时间:2019-12-09 10:27:10      阅读:166      评论:0      收藏:0      [点我收藏+]

基本数据类型

1. 基本数据类型一般存放在中,包括:String, Number, Boolean, Undefined, Null, Symbol。

2. 基本数据类型的特点: 占用空间小,大小固定, 通过按值来访问。

3. typeOf(null) == Object, null是Object类型,为什么null存放在栈而不是堆中?具体解答参考: https://2ality.com/2013/10/typeof-null.html

引用数据类型

1. 一般存放在堆中,包括: Object, Function, Array, RegExp...

2. 引用数据类型占据空间大、大小不固定。引用数据类型在栈中存储了该对象所在的堆内存地址,当需要引用值时,首先获取栈中过得内存地址,然后才能够堆内存中获取该值。

图解

 技术分享图片

问题1

const 定义的值能改变吗?

解答: 1. 当使用const定义一个基本类型的数据时,其值不能改变

   2. 当使用const定义一个对象的时候, 它的地址不能改变,但是值是可以改变的

举例说明:

const person={};
person.name="ABC";
//上面两行代码并不会改变person的值,这个值指的是该对象存储在栈中的内存地址,也可以说是指针。person.name只是改变了堆里面的值。
person={}
//这样就不对了,会抛出"TypeError: Assignment to constant variable."。

问题2

var obj1 = {name: "ABC"};
var obj2 = obj1
obj2.age=obj1

obj1=? obj2=?
//p1 = {name: "ABC", age=1}; 
//
p2 = {name: "ABC", age=1};
//
这样就一目了然了,var p2 = p1, 其实执行的是引用类型的复制操作,只是把p1的内存地址给了p2, p1 p2 有相同的内存地址,在堆内存中指向的是同一个Object。

技术分享图片

 

 

 

 

 

 

 

JS 栈,堆,常量池

原文:https://www.cnblogs.com/dxh1015/p/12008977.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!