十二、JS引用数据类型
前言
JS分为两种数据类型:
- 基本数据类型
基本数据类型在上一篇文章中已经介绍,其包括:Number
String
Boolean
Null
Undefined
Symbol
(ES6中的语法,后续文章中会介绍)
- 引用数据类型
引用数据类型即Object
,在JS中,所有除了基本数据类型外的数据类型都属于Object,例如数组、函数方法、对象等。
基本数据类型和引用数据类型的主要区别
声明变量时分配的内存不同
- 基本数据类型声明变量时分配的是栈内存,它声明的变量存在栈中。
//基本数据类型存在栈中
var a = 10;
var b = a;
var b = 20;
console.log(a);
console.log(b);
//输出10 20
运行如上代码段,输出10 20。
初始的栈内只有一个a = 10,定义变量b,将a的值复制过来,b的值为10,此时b保存的只是a的一个复制,当为b赋新的值20后,b在栈中保存的值就会由10变为20,而a未做改变依然是10。
栈中的变化情况如图所示:
- 引用数据类型声明变量时分配的是堆内存,它声明的变量存在堆中。
//引用数据类型存在堆中
var obj1 = new Object();
var obj2 = obj1;
obj2.name = "nana";
console.log(obj1.name);
//输出 nana
引用数据类型保存的是对象在堆内存中的引用地址,因此,obj1复制给obj2的实际上是obj1的引用地址,复制后,obj1和obj2指向同一个堆内存对象,引用地址变成同一个地址,所以为obj2添加新的name属性时,obj1也能访问到name属性,故obj1也会输出nana。
引用数据类型的赋值过程如下所示:
以上为本萌新个人总结,如有不当之处望指正,有问题可以联系
邮箱:yuna_03@163.com或
QQ:2635591841
更于2021.2.7