js中的堆内存和栈内存
作者:互联网
我们常常会听说什么栈内存、堆内存,那么他们到底有什么区别呢,在js中又是如何区分他们的呢,今天我们来看一下。
一、栈内存和堆内存的区分
一般来说,栈内存主要用于存储各种基本类型的变量,包括Boolean、Number、String、Undefined、Null...以及对象变量的指针,这时候栈内存给人的感觉就像一个线性排列的空间,每个小单元大小基本相等,栈内存中的变量一般都是已知大小或者有范围上限的,算作一种简单存储。
而堆内存主要负责像对象Object这种变量类型的存储,堆内存存储的对象类型数据对于大小这方面,一般都是未知的,(所以这大概也是为什么null作为一个object类型的变量却存储在栈内存中的原因)。
来一张图感受一下:
二、测试
Ⅰ.基本数据类型
/* 基本数据类型 */ var a = 1; var b = 1; console.log(a === b);//true var c = '桔子桑'; var d = '桔子桑'; console.log(c === d);//true
基本数据类型,因为都是存在栈内存中的,以上面的int为例:
var a = 1;变量 a 存在栈内存中,他的值是基本数据类型(int),自然也是在栈内存中,栈内存有没有1?没有那就拿出一块内存存1,这个变量a指向这块值为1的栈内存地址;
var b = 1;同理,变量 b 也是在栈内存中的,但是赋值的时候,发现,栈内存有一块地址存着int型的值1,那么就直接指向这块栈内存了;
所以最终 a === b 是 true;
Ⅱ.new 关键字生成的对象
/* new关键字 */ var a = new String('桔子桑'); var b = new String('桔子桑'); console.log(a === b);//fasle
new关键字生成的对象都是存在于堆内存中的,上述代码中:
var a = new String('桔子桑');变量 a 存在于栈内存中,他的值是一个指针,这个指针指向堆内存中的一个对象!
标签:变量,数据类型,桔子,js,内存,var,new 来源: https://www.cnblogs.com/eco-just/p/11119830.html