JS基本类型和引用类型的区别
2018-08-07 本文已影响0人
jackie季
当我们打开一个页面时,系统会为其分配一定的内存空间,这里面就包括了JS的内存区,JS内存区又分为代码区和数据区,顾名思义就是存代码和数据的区域,例如写入 var a = 1,那么a就存在了代码区,数字1就存在了数据区
在数据区中,包括栈内存(Stack)和堆内存(Heap)
基本类型的数据就存在栈内存中,它们可以直接访问,是按照值进行分配的,可以直接操作栈内存空间的值
var a = 1
b = a
console.log(a) // 1
console.log(b) // 1
b = 2 // 改变b的值对a没有影响
console.log(a) // 1
console.log(b) // 2
除过上面的 6 种基本数据类型外,剩下的就是引用类型了,统称为 Object 类型
引用类型的值是按引用访问的,它的值保存在堆内存中,栈内存中保存的是它的地址,该地址与堆内存中的值相关联
var a = {name:"percy"};
var b;
b = a;
a.name = "zyj";
console.log(b.name); // zyj
b.age = 22;
console.log(a.age); // 22
var c = {
name: "zyj",
age: 22
}
图解如下:
image.png
总结:
栈内存 | 堆内存 |
---|---|
存储基础数据类型 | 存储引用数据类型 |
按值访问 | 按引用访问 |
存储的值大小固定 | 存储的值大小不定,可动态调整 |
由系统自动分配内存空间 | 由程序员通过代码进行分配 |
主要用来执行程序 | 主要用来存放对象 |
空间小,运行效率高 | 空间大,但是运行效率相对较低 |
先进后出,后进先出 | 无序存储,可根据引用直接获取 |