js的深拷貝的理解和實現

2022-01-29 02:33:09 字數 661 閱讀 1868

一:什麼是深拷貝?

舉例:a=b,正常情況下當改變a時b也改變,當改變a時b第一層不改變copy就是淺拷貝,當改變a時b底基層都不會改變就是深拷貝

二:實現深拷貝

1、最簡單方法就是使用json.stringfy()和json.parse()。

var syb = symbol('obj');

var person = ,

ok: syb,

un: undefined

}var copyperson = json.parse(json.stringify(person))

但是有侷限性:當值為undefinedfunctionsymbol會在轉換過程中被忽略,物件值有這三種的話用這種方法會導致屬性丟失。

2、通用方法(遞迴複製)

deepclone => (obj);

if(obj && typeof obj==="object")else}}

}return objclone;

}

另外注意obj.hasownproperty(key)有什麼用?

使用了for in遍歷陣列,就需要用hasownproperty來規避遍歷到原型鏈上的屬性或方法

理解js淺拷貝和深拷貝

理解深拷貝和淺拷貝之前先了解下js中的基本型別和引用型別 1 基本型別 在js中,資料的基本型別undefined,null,string,number,boolean,在變數中賦的實際值,基本型別就是簡單的資料段。基本型別的值是不可以改變的 var a 1 var b a a console.lo...

js實現深拷貝和淺拷貝

let obj let newobj obj.age.age 25 修改第二層的obj.age.age,newobj.age.age也會跟著變化 console.log newobj 複製 注意 資料的slice和concat方法也是淺拷貝,只能拷貝一層 原理 把乙個物件轉化成乙個字串,再把這個字串...

js實現深拷貝和淺拷貝

淺拷貝 思路 把父物件的屬性,全部拷貝給子物件,實現繼承。問題 如果父物件的屬性等於陣列或另乙個物件,那麼實際上,子物件獲得的只是乙個記憶體位址,不會開闢新棧,不是真正拷貝,因此存在父物件被篡改的可能。function deepcopy o for i in o return f 深拷貝 思路 遞迴...