浅拷贝与深拷贝

在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存,而深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存,与原对象脱离。
浅拷贝 只拷贝指针,深拷贝就是拷贝他的值,申请一个新的内存,重新生成的对像,与原对象脱离。就像是浅拷贝就是你的影子,深拷贝是你的克隆人,你没了影子也就没了,但是克隆人还活着。
浅拷贝:简单的赋值,指向同一个内存地址。
在这里插入图片描述
深拷贝的方法
1.JSON转换

var aa = {
	name:'ye',
	age:'10'
};
var bb = JSON.stringify(aa)
console.log(bb)
aa.age = 13;
console.log(bb)
{"name":"ye","age":"10"}
{"name":"ye","age":"10"}

缺点:

(1)如果对象里有函数,函数无法被拷贝下来

(2)无法拷贝copyObj对象原型链上的属性和方法

(3)当数据的层次很深,会栈溢出
2.数组对象的cancat()
在这里插入图片描述
3.对象数据类型,这个方法需要知道a对象里边都有哪些字段。一个一个的复制,较麻烦。
在这里插入图片描述
4.angular的一个方法:angular.copy()

5.普通递归函数

function deepCopy( source ) {
	if (!isObject(source)) return source; //如果不是对象的话直接返回
    let target = Array.isArray( source ) ? [] : {} //数组兼容
    for ( var k in source ) {
        if (source.hasOwnProperty(k)) {
            if ( typeof source[ k ] === 'object' ) {
                target[ k ] = deepCopy( source[ k ] )
            } else {
                target[ k ] = source[ k ]
            }
        }
    }
    return target
}
function isObject(obj) {
    return typeof obj === 'object' && obj !== null
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值