js中的基本类型与引用类型学习

时间:2021-04-09 22:17:07

一、基本数据类型

  ECMAScript 有 5 种原始类型(primitive type),即 Undefined、Null、Boolean、Number 和 String,也称为基本数据类型,ES6中又增加了一种Symbol。

  基本数据类型是存放在栈(stack)中的简单数据,由stack自动分配内存空间,数据大小确定,他们是直接按值存放的,所以基本数据类型的访问可以直接按值访问,他们会由系统自动释放。任何方法都不能改变基本类型的值,基本类型的比较是值的比较。

  1、undefined类型 ---- 只有一个值,即undefined。当声明的变量未初始化 时,该变量的默认值是undefined; 

    var unType;  //声明变量未赋值
    console.log(unType);  // undefined
    console.log(typeof unType); // undefined
    console.log(unType == undefined); //true
    console.log(unType === undefined); //true

  2、null 类型 ---- 也是只有一个专用值 null,即它的字面量。值undefined实际上是从null派生而来的,因此ECMAScript把它们定义为相等的。
    console.log(null == undefined); // true
    虽然这两个值相等,但它们的含义是不同的,null 用于表示尚未存在的对象,如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是 null。

  3、boolean(布尔)类型 ---- 它有两个值 true 和 false(即两个boolean字面量)。

  4、number类型 ---- 既可以表示32位的整数,也可以表示64位的浮点数。

    几个特殊的number值:Number.MAX_VALUE 、Number.MIN_VALUE、Infinity(表示无穷大)、NaN(Not a Number)..........

    具体可学习w3school。

  5、string类型 ---- 字符串类型,是唯一一个没有固定大小的原始类型。

  6、Symbol类型 ---- 表示独一无二的值,通过Symbol函数生成。

二、引用数据类型

  引用数据类型除了上述的基本类型之外就是引用类型了,function、array、object、regex.....(js中出了基本数据类型以外的都是对象)

  引用数据类型是存放在堆(heap)内存中的对象,heap是动态分配的内存,每个空间大小不一样,要根据情况进行特定的配置,也不一定会自动释放。变量保存的是在栈内存中的一个指针(保存的是堆内存中的引用地址),指针指向的是堆内存。在复制引用类型值的时候,其实只复制了指向该内存的地址。引用类型的值是可变的,引用类型的比较是引用的比较,也就是比较两个对象在堆内存中的地址是否相同。
  例1:   

       var object1 = {};

    var object2 = {};
    console.log(object1 == object2); // false
    解析如图:
    js中的基本类型与引用类型学习
  
例2:

  var a = {name:'Joe',age:18};
  var b = a;
  console.log(b); // { name: 'Joe', age: 18 }
  b.name = "Jack";
  console.log(b.name); // Jack
  console.log(a.name); // Jack
  console.log(a == b); // true
 
       js中的基本类型与引用类型学习

  学习随笔,如有不周,望请海涵,欢迎小伙伴们各种讨论、指正。