JS深浅拷贝

JS深浅拷贝

js包括基本数据类型:Null、Undifined、Number、String、Boolean
引用数据类型:Array、Object
基本数据类型保存在栈内存,引用数据类型保存在堆内存。因此,对于引用类型的复制,简单赋值无用,需要拷贝。拷贝存在两种类型:深拷贝与浅拷贝。

1、浅拷贝

浅拷贝只复制了指向某个对象的指针,而不复制对象本身,所以如果父对象的属性是基本数据类型,就没事,如果父对象的属性是引用数据类型,则父对象的值也有可能被修改。

// 浅拷贝函数
function simpleClone(obj) {
    let temp = {}
    for ( let i in obj ) {
        temp[i] = obj[i]
    }
    return temp
}

var obj = {
          a: "hello",
          b:{
              a: "world",
              b: 21
            },
          c:["Bob", "Tom", "Jenny"],
          d:function() {
              alert("hello world");
            }
       }
var obj1 = simpleClone(obj)
obj1.a = "hi"
obj1.b.a = "w"
console.log('obj1=>>>',obj1);
console.log('obj=>>>',obj);

结果为:
在这里插入图片描述

2、深拷贝

function deepClone( initalObj, finalObj ) {
    var temp = finalObj || {}
    for( var i in initalObj ) {
        var prop = intalObj[i]
        if (prop === temp) {
            continue
        }   
        if (typeof prop === 'object') {
            temp[i] = (prop.constructor === Array) ? [] : Object.create(prop);
        } else {
            temp[i] = prop
        }
    }
    return temp
}

var obj = {
          a: "hello",
          b:{
              a: "world",
              b: 21
            },
          c:["Bob", "Tom", "Jenny"],
          d:function() {
              alert("hello world");
            }
        }
       
var obj1 = deepClone(obj);
obj1.a = "hi"
obj1.b.a = "w"
console.log('obj1=>>>',obj1);
console.log('obj=>>>',obj);

打印结果为:
在这里插入图片描述

内容有参考:https://www.cnblogs.com/136asdxxl/p/8645750.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值