引用类型和基本类型的区别?

两者的区别可以主要从以下三个方面说起:

  1. 内存空间
  2. 对值的操作
  3. 变量的复制

《javascript高级程序设计》中对于二者的定义是:

  • 基本类型值指的是简单的数据段
  • 引用类型值指那些可能由多个值构成的对象
  1. 基本数据类型包括: number string boolean undefined null
  2. 引用类型包括:array object function
内存空间
  • 我们将js的内存分为栈内存和堆内存;基本类型存放于栈内存中,包括变量以及变量的值。
    例如:

    var name = ‘张三’;
    var city = ‘西安’;
    var age = 22;

|栈区 |
| name | 张三 |
| city | 西安 |
| age | 22 |

  • 引用类型是大小不固定的数据,但是他们的地址大小是固定的,所以把地址存在栈中而值存在堆中。

    var person1 = {name:‘jozo’};
    var person2 = {name:‘xiaom’};
    var person3 = {name:‘xiaoq’};

| 栈区 |
|-person1-|-地址1-|
| person2 | 地址2 |
| person3 | 地址3 |

| 堆区 |
|-object1-|
| object2 |
| object3 |

对值的操作
  • 基本类型值:按值访问,操作的是他们实际保存的值
  • 按引用访问,当查询时,我们需要先从栈中读取内存地址,然后再找到保存在堆内存中的值。对于引用类型的值,我们可以为其添加属性和方法,也可以改变和删除其属性的方法。
变量的复制
  • 基本类型变量的复制:从一个变量向另一个复制时,会在栈中创建一个新值,然后把值复制到为新变量分配的位置上。
  • 引用类型变量的复制:复制的是存储在栈中的指针,将指针复制到栈中为新变量分配的空间中,而这个指针副本和原指针指向存储在堆中的同一个对象,复制操作结束后,两个变量实际上将引用同一个对象,因此改变其中一个,将影响另一个。

判断是否为引用类型:

  1. 通过instanceof

  2. 通过constructor

    function Person() {}
    var per = new Person();
    console.log(per instanceof Person);//true
    console.log(per.constructor == Person);//true

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值