数组,对象的拷贝方式(深拷贝和浅拷贝)

数组,对象的拷贝方式(深拷贝和浅拷贝)

对象和数组的深拷贝方式

引言
typeof 检测arr或者对象的时候只会返回 Object
引用数据类型:一般来说就是函数 对象 数组

1.递归方式

function isObject(obj){
            var type=typeof obj;
            return type ==='function' ||type==='object';
        }
        var deepClone=function(obj){
            if(!isObject(obj))return obj;  //判断是否为引用数据类型的数据,不是就返回
            var num= new obj.constructor;  //返回obj的建造对象 然后用new构建一个空的对象或者数组
            for(i in obj){                  //遍历循环对象,数组
                num[i]= deepClone(obj[i])   //递归调用函数存储在num中
            }
            return num   //最后返回num
        }
        console.log(deepClone([123,123,[123,123]]))
        a1={a:123,ca:123}
        var a=Object.assign(a1,{a:21,asdf:123,c(){}})
        console.log(a)



2.JSON.parse(JSON.stringify(obj))
注意这个方法有缺陷,其一是他会丢失函数的内容。
详细可以去查找相关的文档,过段时间我应该也会写一篇这样的文档。狗头保命~~~~

原理就是先把obj 对象(数组)转化为 字符串 然后再转化回来,然后保存给一个新的变量,

var obj=[12,123,[123],{a:123,name:'张晓军'}]
var newObj=JSON.parse(JSON.stringify(obj))
console.log(newObj)

  1. 扩展运算符 …
    这个方法只可以对没有嵌套多层数组的数组使用,所以放到后面讲

浅复制

。。。后续有待时间来写,上面的深复制已经总结完了的 手动狗头保命······嘻嘻嘻

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值