javascript 深拷贝和浅拷贝
1、深拷贝方法:
1)、JSON.stringify与JSON.parse转化实现深拷贝和浅拷贝;
注意:当值为undefined、function、symbol 会在转换过程中被忽略。。。所以,对象值有这三种的话用这种方法会导致属性丢失。
function deepClone(obj){
let _obj = JSON.stringify(obj),
objClone = JSON.parse(_obj);
return objClone
}
2)、递归实现深拷贝函数:
function deepCopy(obj) {
var result = Array.isArray(obj) ? [] : {};
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
if (typeof obj[key] === 'object' && obj[key]!==null) {
result[key] = deepCopy(obj[key]); //递归复制
} else {
result[key] = obj[key];
}
}
}
return result;
}
3)、Jquery方法
$.extend( [deep ], target, object1 [, objectN ] )
deep表示是否深拷贝,为true为深拷贝,为false,则为浅拷贝
target Object类型 目标对象,其他对象的成员属性将被附加到该对象上。
object1 objectN可选。 Object类型 第一个以及第N个被合并的对象。
4)、Object.assgin(), 数组的slice()可用来拷贝对象、数组都是基本数据类型的
例如:let obj = { a: 1,b:2}
let arr = [1,2];
元素值包含对象等则不可以用此方法深拷贝
2、浅拷贝
A数据内容修改会影响B数据内容变化;