js的变量可以存放两种类型,即基本类型和引用类型。
基本类型即:null,number,string,boolean,underfined等
引用类型:array,object,function等
基本类型存放于栈中,而引用类型存放于堆中。
举个例子:
function result(chinese,english,math){
this.chinese = chinese;
this.english = english;
this.math = math;
}
var power = 100%;
var people = true;
var goodstr = "you are right";
var obj = new object();
var arrlist = [1,2,3,4,5];
var result= new result("语文","英语","数学");
于是我们就得到如下的内存分析图:
从上面我们可以看出power,people,goodstr为基本数据类型;他们的值直接就是放在栈中的,而引用类型:obj,arrlist,result,它们引用变量是存放在栈中的,但是它们却是指向堆中的的实际对象。那引用类型为什么要这样子呢?我们从分析图当中也能看到,我们是没有办法直接去操作堆中的数据的,但是我们可以通过栈中,对堆的对象进行引用从而实现对堆中的数据进行操作。
那基本数据类型和引用类型为什么要这样存放呢?那是因为栈比堆的运行速度要快得多,而堆比栈的存储量要大得多。在栈中存储的是相对简单的数据类型,它们是相对比较稳定的,所占用的内存也比较的少。而在堆中查找实际对象的时候是一个比较费时间的过程。
总体而言,我们要学好js,从它的存储机制去了解对我们是很有帮助的。