- 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ù)類型就有了深拷貝。 - 引用數(shù)據(jù)類型有哪些?
引用數(shù)據(jù)類型有Object、Array、Function三種。 - 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)就還是要用第一種了。 - Object數(shù)據(jù)類型的幾種深拷貝,包括Array中第一種和第四種外還有幾種:
let a = {a:1,b:2}
第三種,只適用于單層:
let b = Object.assign({},a)
對象的中若是單層也用展開運(yùn)算符拷貝;結(jié)構(gòu)復(fù)雜點(diǎn)的對象還是用第一種比較好。 - 展開運(yùn)算符和其他幾種只適合單層數(shù)據(jù)拷貝的,應(yīng)該只是拷貝的第一層的數(shù)據(jù)的指針,第二層等等數(shù)據(jù)指針指向的還是同一個(gè)地址,所以多層引用類型數(shù)據(jù)還是使用JSON.parse(JSON.Stringify())靠譜。單層使用展開運(yùn)算符方便。
【js】js深拷貝的幾種方法
最后編輯于 :
?著作權(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ù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。