JavaScript 深拷貝

在JavaScript中,深拷貝是指創(chuàng)建一個(gè)新對(duì)象,并復(fù)制原始對(duì)象的所有屬性和值,包括對(duì)象內(nèi)部的嵌套屬性。這樣可以在不改變?cè)紝?duì)象的情況下,得到一個(gè)完全獨(dú)立的副本。

在JavaScript中,可以使用以下幾種方法進(jìn)行深拷貝:

使用Object.assign()方法:

var originalObject = {a: 1, b: 2, c: {d: 3}};  
var copiedObject = Object.assign({}, originalObject);

使用JSON的parse()和stringify()方法:

var originalObject = {a: 1, b: 2, c: {d: 3}};  
var copiedObject = JSON.parse(JSON.stringify(originalObject));

使用遞歸復(fù)制函數(shù):

function deepClone(obj) {  
    if (obj === null || typeof obj !== 'object') {  
        return obj;  
    }  
    let clone = Array.isArray(obj) ? [] : {};  
    for (let key in obj) {  
        if (obj.hasOwnProperty(key)) {  
            clone[key] = deepClone(obj[key]);  
        } else {  
            clone[key] = obj[key];  
        }     
    }     
    return clone;  
}  
var originalObject = {a: 1, b: 2, c: {d: 3}};  
var copiedObject = deepClone(originalObject);

注意:如果對(duì)象中包含函數(shù)、RegExp、Date等特殊類(lèi)型的數(shù)據(jù),這些數(shù)據(jù)不會(huì)被復(fù)制。如果對(duì)象中包含函數(shù)、RegExp、Date等特殊類(lèi)型的數(shù)據(jù),需要進(jìn)行特殊處理。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 此前寫(xiě)過(guò)一篇文章:JavaScript深淺拷貝,其實(shí)沒(méi)那么難![http://www.itdecent.cn/p...
    越前君閱讀 3,012評(píng)論 1 3
  • JavaScript----深拷貝、淺拷貝 為說(shuō)清楚二者使用過(guò)程中的區(qū)別,首先介紹一些JavaScript的基本知...
    扮豬老虎吃閱讀 491評(píng)論 0 0
  • 一、如何區(qū)分深拷貝和淺拷貝? 假設(shè)B復(fù)制了A,當(dāng)修改A時(shí),看B是否發(fā)生變化,如果B也跟著變了,說(shuō)明這是淺拷貝,拿人...
    Adonia汪閱讀 319評(píng)論 0 0
  • 數(shù)據(jù)類(lèi)型和堆棧的關(guān)系 基本類(lèi)型:undefined null Boolean Bumber String Symb...
    kjkongjun閱讀 340評(píng)論 0 0
  • 前言 之前去一家公司面試的時(shí)候,面試官問(wèn)了我一個(gè)問(wèn)題,說(shuō):"如何才能深拷貝一個(gè)對(duì)象"。當(dāng)時(shí)我心里有些竊喜,這么簡(jiǎn)單...
    大春春閱讀 2,576評(píng)論 2 28

友情鏈接更多精彩內(nèi)容