首页 > 代码库 > 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的数据类型