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

总结:

栈内存 堆内存
存储基础数据类型 存储引用数据类型
按值访问 按引用访问
存储的值大小固定 存储的值大小不定,可动态调整
由系统自动分配内存空间 由程序员通过代码进行分配
主要用来执行程序 主要用来存放对象
空间小,运行效率高 空间大,但是运行效率相对较低
先进后出,后进先出 无序存储,可根据引用直接获取
上一篇下一篇

猜你喜欢

热点阅读