深度拷貝
拷貝出來的和被拷貝的沒有關(guān)系,即被拷貝的屬性改變,拷貝出來的屬性不會跟著改變。
// 深度拷貝 遞歸拷貝 (拷貝出來的和被拷貝的沒有關(guān)系)
function deepClone(value) {
// null undefined直接返回 null == undefined是true,但是null == undefined是false
if (value == null) return value; // 因為上面,所以這里只判斷null
if (typeof value !== 'object') return value; // 不是對象的有:Number、Boollean、Function
if (value instanceof Date) return new Date(value); // 如果是日期返回重新創(chuàng)建的日期
if (value instanceof RegExp) return new RegExp(value);
// 如果是對象或者數(shù)組
let construc = new value.constructor(value);
for (const key in value) {
if (value.hasOwnProperty(key)) {
construc[key] = deepClone(value[key]); // 如果是obj,那么繼續(xù)調(diào)用自己循環(huán),這就叫做遞歸拷貝
}
}
return construc;
}
// console.log(new {}.constructor) // {}.constructor = Object() new Object() = {}
console.log(deepClone([1,2,{a:{b:1,c:{d:function(){}}}}]))