JS对象的深度拷贝

本文介绍了JavaScript中基本类型和引用类型的区分,并深入探讨了对象拷贝时的区别,特别是引用类型拷贝的问题。通过具体代码实例,实现了对象的深度拷贝。

零:引言:

JS的变量或者数据分为两种,基本变量和引用变量。

基本类型:Number,String,Boolean,Null,Undefined

引用类型:(也就是对象类型)Object,Array,Function等

基本类型是按值访问的,栈内存保存着的是具体的值

引用类型的数据,在栈内存中保存着的是索引,索引指向存着具体值的堆内存。

 

 

一:对象拷贝

如果进行对象的拷贝,被拷贝的对象里,属性的值可以是基本类型,也可以是引用类型。

比如

var obj = { 
    name:"MaPengcheng",
    age:20,
    grade:[100,99,80]
}

  name和age属性的值就是基本类型,grade属性的值为数组引用类型;

  那么,如果拷贝的时候仅仅是赋值操作:

    基本类型的数据进行拷贝时,直接是拷贝具体的值的。

    但引用类型的数据进行拷贝时,拷贝的是数据所在的索引地址,这样的拷贝结果是会随原来的值的改变而改变的。

二:深度拷贝:

给出具体代码,实现对象的深拷贝:

var toStr = Object.prototype.toString;

function deepCopy(origin,taregt){
   //容错处理  
   var target = target || {};      
   for(var prop in origin){
       //防止这个对象有原型继承下来的属性被拷贝  
       if(origin.hasOwnProperty(prop)){
            if(origin[prop]!=null && typeof origin[prop] == 'object'){
                 target[prop] = toStr.call(origin[prop]) == '[object Array]'?[]:{};
//递归拷贝 deepCopy(origin[prop],target[prop]); }
else{ target[prop] = origin[prop]; } } } return target; }

 

转载于:https://www.cnblogs.com/better2019/p/9326845.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值