【js】js深拷貝的幾種方法

  1. js深拷貝是什么?
    js分為兩種數(shù)據(jù)類型,一種是基礎(chǔ)數(shù)據(jù)類型,另一種是引用數(shù)據(jù)類型;基礎(chǔ)數(shù)據(jù)類型在賦值的時(shí)候是直接給變量賦值的,而引用數(shù)據(jù)類型變量存儲的是地址的指針,如果像基礎(chǔ)數(shù)據(jù)類型那樣直接復(fù)制則賦bj值的地址的指針,而不是真正的值,這樣就造成兩個(gè)變量訪問的是同一個(gè)地址,數(shù)據(jù)就會錯(cuò)亂,所以對于引用數(shù)據(jù)類型就有了深拷貝。
  2. 引用數(shù)據(jù)類型有哪些?
    引用數(shù)據(jù)類型有Object、Array、Function三種。
  3. Array數(shù)據(jù)類型深拷貝的幾種方法?
    let a = [1,2,3,4];
    第一種,最原始的方法,可用復(fù)雜結(jié)構(gòu)的數(shù)組拷貝:
    let b = JSON.parse(JSON.Stringfy(a)
    第二種,用數(shù)據(jù)的concat(),只適用于單層數(shù)據(jù):
    let b = a.concat()
    第三種,用slice(),只適用于單層數(shù)組:
    let b = a.slice()
    第四種,es的展開運(yùn)算符,也是只適用于單層數(shù)組:
    let b = [...a]
    綜上所述,若是單層數(shù)組推薦使用展開運(yùn)算符,代碼簡潔易于理解;復(fù)雜點(diǎn)數(shù)組結(jié)構(gòu)就還是要用第一種了。
  4. Object數(shù)據(jù)類型的幾種深拷貝,包括Array中第一種和第四種外還有幾種:
    let a = {a:1,b:2}
    第三種,只適用于單層:
    let b = Object.assign({},a)
    對象的中若是單層也用展開運(yùn)算符拷貝;結(jié)構(gòu)復(fù)雜點(diǎn)的對象還是用第一種比較好。
  5. 展開運(yùn)算符和其他幾種只適合單層數(shù)據(jù)拷貝的,應(yīng)該只是拷貝的第一層的數(shù)據(jù)的指針,第二層等等數(shù)據(jù)指針指向的還是同一個(gè)地址,所以多層引用類型數(shù)據(jù)還是使用JSON.parse(JSON.Stringify())靠譜。單層使用展開運(yùn)算符方便。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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