深拷贝和浅拷贝的使用和区分
JS数据类型分别基本数据类型和引用数据类型,
基本数据类型保存的是值,
引用类型保存的是引用地址(this指针)。
浅拷贝共用一个引用地址,深拷贝会创建新的内存地址。
一、浅拷贝
共用一个地址
二、深拷贝
创建新的内存地址
深拷贝的方法
1.JSON.stringify转为字符串再JSON.parse
var a = ["red", 'blue', 'purple'];
var b = JSON.parse(JSON.stringify(a));
a[1] = 'yellow';
console.log(b[1]) //red
2.深度递归遍历
hasOwnProperty()判断一个属性是自身的还是从原型链上继承的
var a = {
name: "muyiy",
book: {
title: "You Don't Know JS",
price: "45"
},
a1: undefined,
a2: null,
a3: 123
}
function cloneDeep1(source) {
var target = {};
for (var key in source) { //遍历
if (source.hasOwnProperty(key)) { //判断是本身拥有还是继承的
if (typeof source[key] === 'object') {
target[key] = cloneDeep1(source[key]); // 注意这里
} else {
target[key] = source[key];
}
}
}
return target;
}
var b = cloneDeep1(a);
console.log(b);