数组,对象的拷贝方式(深拷贝和浅拷贝)
对象和数组的深拷贝方式
引言
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)
- 扩展运算符 …
这个方法只可以对没有嵌套多层数组的数组使用,所以放到后面讲
浅复制
。。。后续有待时间来写,上面的深复制已经总结完了的 手动狗头保命······嘻嘻嘻