<script>
// 浅拷贝 :拷贝后基本数据类型互不影响,引用数据类型相互影响
var obj = {
name: "爱就一个字",
hobby: ["学习", ["看电影", "购物"], "玩游戏"]
}
function shallCopy(obj) {
let target = {};
for (var i in obj) {
if (obj.hasOwnProperty) {
target[i] = obj[i]
}
}
return target;
}
// var obj1 = shallCopy(obj)
// obj1.name = "涂涂";
// obj1.hobby[0] = "玩耍"
// console.log(obj);
// console.log(obj1);
// 深拷贝 ; 基本数据类型和应用数据类型都互不影响
function deepClone(obj) {
let targetObj = {};
if (typeof obj !== "object") return obj;
if (obj === null) return obj;
if (obj instanceof Date) return new Date(obj)
if (obj instanceof RegExp) return new RegExp(obj)
targetObj = Array.isArray(obj) ? [] : {}
for (let i in obj) {
if (obj.hasOwnProperty(i)) {
targetObj[i] = deepClone(obj[i])
}
}
return targetObj;
}
var obj1 = deepClone(obj)
obj1.name = "涂涂";
obj1.hobby[0] = "玩耍"
console.log(obj);
console.log(obj1);
3. JSON.parse(JSON.stringify()) //虽然也是深拷贝,但是一个类型无法拷贝,比如日期、正则、函数等
</script>