JS中基本类型和引用类型的复制

ES变量分基本类型引用类型
基本类型:简单的数据段,即Undefined、Null、Boolean、Number、String和Symbol
引用类型:可能由多个值构成的对象,即Object
基本类型的值是直接存储在里面的,而引用类型的值是存储在里面。
由于js不允许直接操作对象的内存空间,所以在操作对象时,实际上是在操作对象的引用而不是实际的对象。

举个例子,该代码的存储格式如下图所示

    var x = 2;
    var obj = new Object()

在这里插入图片描述

当复制变量时,如下

        var x = 2;
        var x1 = x;
        var obj = new Object()
        var obj1 = obj

在这里插入图片描述
从复制后的内存图可以看出x和x1没关系,即x1改变值不会影响到x
而obj和obj1指向的是同一个对象,所以obj1更改对象的值时,obj也会随之改变

        var x = '我是x';
        var x1 = x;           //复制x
        x1 = '我是x1'
        console.log(x)        //我是x(x1改了值,但没有影响到x)
        console.log(x1)       //我是x1

        var obj = new Object()
        obj.name = '我是obj'
        var obj1 = obj        //复制obj给obj1
        obj1.name = '我是obj1' 
        console.log(obj)      //我是obj1(obj1改了值,影响到了obj)
        console.log(obj1)     //我是obj1

总结:

  • 基本类型值在内存中占据固定大小的空间,因此会被保存在栈内存中
  • 从一个变量向另一个变量复制基本类型的值,会创建这个值的副本
  • 引用类型的值是对象,保存在堆内存中
  • 包含引用类型值的变量实际上包含的并不是对象本身,而是一个指向该对象的指针
  • 从一个变量向另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终都会指向同一个对象

以上内容参考自《JavaScript高级程序设计(第3版)》

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值