Object.assign()是深拷貝還是淺拷貝?

定義:Object.assign() 方法用于將所有可枚舉屬性的值從一個或多個源對象復制到目標對象。它將返回目標對象。

????????Object.assign()拷貝的是屬性值。假如源對象的屬性值是一個對象的引用,那么它也只指向那個引用。也就是說,如果對象的屬性值為簡單類型(如string, number),通過Object.assign({},srcObj);得到的新對象為深拷貝;如果屬性值為對象或其它引用類型,那對于這個對象而言其實是淺拷貝的。

那問題來了?,如何實現深拷貝?

? ??????1.用 JSON.stringify 把對象轉換成字符串,再用 JSON.parse 把字符串轉換成新的對象,但是需要注意的是,可以轉成 JSON 格式的對象才能使用這種方法,如果對象中包含 function 或 RegExp 這些就不能用這種方法了。

????????2.Object.assign()拷貝

????????當對象中只有一級屬性,沒有二級屬性的時候,此方法為深拷貝,但是對象中有對象的時候,此方法,在二級屬性以后就是淺拷貝。

????????3.使用遞歸的方式實現深拷貝

????????此外,通過jQuery的extend方法實現深拷貝,lodash.cloneDeep()實現深拷貝。



參考文檔:object.assign()-MDN

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/assign


---------------------------------------------------------------------------------


以上為個人理解和總結,歡迎討論。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容