每日记忆-----前端面试题(JavaScript)

浅拷贝、深拷贝

说明:个人觉得通过代码理解记忆效果最好~~~

---------------------------------------只有引用类型有深浅拷贝的概念-----------------------------------------------

浅拷贝:拷贝就是增加了一个指针指向已存在的内存(JavaScript并没有指针的概念,这里只是用于辅助说明),浅拷贝只是拷贝了内存地址,子类的属性指向的是父类属性的内存地址,当子类的属性修改以后,父类的属性也随之被修改。

//一个非常简单的浅拷贝
<script>
    let arr=[1,2,3,4];
    let arr1=arr;       //浅拷贝:只拷贝了地址,但是未开辟空间
    arr[0]=66;
    console.log(arr);   //[66, 2, 3, 4]
    console.log(arr1);  //[66, 2, 3, 4]
</script>

深拷贝:深拷贝就是增加一个指针,并申请一个新的内存,并且让这个新增加的指针指向这个新的内存地址使用深拷贝,在释放内存的时候就不会像浅拷贝一样出现释放同一段内存的错误,当我们需要复制原对象但又不能修改原对象的时候,深拷贝就是最好的选择。

实现方式:重新创建一个数组空间,将另一个空间中的元素循环复制到新空间中,这实际是两个独立的空间,对一个空间中的元素进行操作,另一个空间中的元素不会受到影响。 

eg1:

<script>
    let arr=[1,2,3,4];
    let arr1=[]
    for(let i=0;i<arr.length;i++){
          arr1.push(arr[i]);
    }
    arr[0]=666;
    console.log(arr,arr1);   //[666, 2, 3, 4] ,  [1, 2, 3, 4]
</script>

eg2:

<script>
    var obj={
        "id":"01",
        "name":"某某",
        "sex":"female"
    }
    var deepObj=JSON.parse(JSON.stringify(obj))
    deepObj.sex="male"
    console.log(obj,deepObj);
</script>

 eg3:

<script>
    function Persion(id,name){
        this.id=id;
        this.name=name;
    }
    Persion.prototype.copy=function(){
        let item=new Persion(this.id,this.name);
        return item;
    }
    let p1=new Persion(1,"某某");
    let p2=p1.copy();
    p2.name="啧啧";
    console.log(p1,p2);
</script>

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值