首页 > 代码库 > js的数据类型
js的数据类型
关于js中的几大数据类型,估计大家都很熟悉:String、Number、Array、Bollean、Null、Undifine、Object;
从这其中,可以延伸出一个感念:基本数据类型和引用类型;
什么是基本数据类型呢?
String、Number、Bollean、Null、Undifine以及ES6新增的symbol,都是基本数据类型;
什么是引用类型?
Array、Object是引用类型;
这两者有什么区别?
在这里要复习内存中的栈和堆的概念,我们都知道计算机内存分为栈和堆:
栈是保存数值类型整体以及引类型的名称(地址)的地方,有点类似一个数组;
堆是保存引用类型的具体内容的地方;
我个人是那么理解的:
栈是用来保存小数据的地方,堆的空间比较大,用来保存一些占内纯多的数据。
String、Number等基本数据类型数据格式简单,所占内存小,因此,他们的名称(变量名)以及具体内容都可以放在栈里;
而array与object数据格式复杂,所占内存大,因此,把他们的名称(地址)寸放在栈中,他们的具体内容则放在堆中。
所以,浏览器在读取内存时,先从栈里开始找,如果是基本数据类型,则可获取名称及内容全部,如果是引用类型,则是先获取它的地址,再根据地址的指向,找到在堆中的具体内容。
因此:
var a = 10;
var b = a;
b = 20;
console..log(a);//10;
基本数据类型,把a的数据拷贝一份,赋值给b,a和b完全独立,所以改变b的值,对a没有影响;
然而:
var obj1 = new Object();
obj1.name = "老王";
var obj2 = obj1;
obj2.name = "小丁丁";
console.log(obj1.name);//"小丁丁";
引用类型,在复制时,只是拷贝了obj1的地址,赋值给了obj2,obj1与obj2都指向堆中的同一个位置,所以,改变他们其中任何一个的属性或方法,实际上改变的是堆中同一个位置的值,所以obj2.name改变了,obj1.name也同样改变了。
以上为我的个人愚见,如果有不对的地方请指出来,我需要各位大神们的指点~~
js的数据类型