摘要:深拷貝深度拷貝就是把父對象拷貝到子對象上,而且兩者的內(nèi)存和以后的操作都互不影響的拷貝遞歸借用對象的和的方法。表示是否深拷貝,為為深拷貝,為,則為淺拷貝類型目標(biāo)對象,其他對象的成員屬性將被附加到該對象上。
數(shù)據(jù)類型
js的數(shù)據(jù)類型有兩種:
1.基本數(shù)據(jù)類型:數(shù)值、字符串、布爾、null、undefined (值類型)
存放在棧中,所以復(fù)制基本數(shù)據(jù)類型的值是會(huì)新開一個(gè)棧內(nèi)存
2.引用數(shù)據(jù)類型:對象
對象引用存放在棧中,對象值存放在堆中,所以復(fù)制引用類型復(fù)制的是應(yīng)用地址,而不是引用類型的值
淺拷貝
如果我們要復(fù)制對象的所有屬性都不是引用類型時(shí),就可以使用淺拷貝,實(shí)現(xiàn)方式就是遍歷并復(fù)制,最后返回新的對象。
function simpleClone(initalObj) {
var obj = {}; for ( var i in initalObj) { obj[i] = initalObj[i]; } return obj; }
concat
slice
assign
深拷貝
深度拷貝就是把父對象拷貝到子對象上,而且兩者的內(nèi)存和以后的操作都互不影響的拷貝!
1.遞歸
2.借用JSON對象的parse和stringify
3.JQ的extend方法。
$.extend( [deep ], target, object1 ,[ objectN ] )
deep表示是否深拷貝,為true為深拷貝,為false,則為淺拷貝
target Object類型 目標(biāo)對象,其他對象的成員屬性將被附加到該對象上。
object1 objectN可選。 Object類型 第一個(gè)以及第N個(gè)被合并的對象
jQuery.extend()只復(fù)制可枚舉的屬性,不繼承原型鏈,函數(shù)復(fù)制引用,內(nèi)部循環(huán)引用不處理。而lodash實(shí)現(xiàn)的就更為優(yōu)秀,它實(shí)現(xiàn)了結(jié)構(gòu)化克隆算法。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/101818.html
摘要:所以,深拷貝是對對象以及對象的所有子對象進(jìn)行拷貝實(shí)現(xiàn)方式就是遞歸調(diào)用淺拷貝對于深拷貝的對象,改變源對象不會(huì)對得到的對象有影響。 上一篇 JavaScript中的繼承 前言 文章開始之前,讓我們先思考一下這幾個(gè)問題: 為什么會(huì)有淺拷貝與深拷貝 什么是淺拷貝與深拷貝 如何實(shí)現(xiàn)淺拷貝與深拷貝 好了,問題出來了,那么下面就讓我們帶著這幾個(gè)問題去探究一下吧! 如果文章中有出現(xiàn)紕漏、錯(cuò)誤之處...
摘要:所以,深拷貝是對對象以及對象的所有子對象進(jìn)行拷貝實(shí)現(xiàn)方式就是遞歸調(diào)用淺拷貝對于深拷貝的對象,改變源對象不會(huì)對得到的對象有影響。 為什么會(huì)有淺拷貝與深拷貝什么是淺拷貝與深拷貝如何實(shí)現(xiàn)淺拷貝與深拷貝好了,問題出來了,那么下面就讓我們帶著這幾個(gè)問題去探究一下吧! 如果文章中有出現(xiàn)紕漏、錯(cuò)誤之處,還請看到的小伙伴多多指教,先行謝過 以下↓ 數(shù)據(jù)類型在開始了解 淺拷貝 與 深拷貝 之前,讓我們先...
摘要:在中可以通過添加一個(gè)參數(shù)來實(shí)現(xiàn)遞歸,調(diào)用就可以實(shí)現(xiàn)一個(gè)深拷貝。利用序列化實(shí)現(xiàn)一個(gè)深拷貝 在JavaScript中,對于Object和Array這類引用類型值,當(dāng)從一個(gè)變量向另一個(gè)變量復(fù)制引用類型值時(shí),這個(gè)值的副本其實(shí)是一個(gè)指針,兩個(gè)變量指向同一個(gè)堆對象,改變其中一個(gè)變量,另一個(gè)也會(huì)受到影響。 這種拷貝分為兩種情況:拷貝引用和拷貝實(shí)例,也就是我們說的淺拷貝和深拷貝 淺拷貝(shallow...
摘要:對象的淺拷貝淺拷貝是對象共用一個(gè)內(nèi)存地址,對象的變化相互影響。這是特別值得注意的地方。和能正確處理的對象只有等能夠被表示的數(shù)據(jù)結(jié)構(gòu),因此函數(shù)這種不能被表示的類型將不能被正確處理。 對象的淺拷貝: 淺拷貝是對象共用一個(gè)內(nèi)存地址,對象的變化相互影響。比如常見的賦值引用就是淺拷貝: let srcObj = {name: lilei, age: 20}; let copyObj = srcO...
摘要:原文地址淺拷貝和深拷貝只針對像這樣的復(fù)雜對象的簡單來說,淺拷貝只拷貝一層對象的屬性,而深拷貝則遞歸拷貝了所有層級。淺拷貝通過來實(shí)現(xiàn)淺拷貝。 原文地址:http://www.silenceboy.com/201... 淺拷貝和深拷貝只針對像Object, Array這樣的復(fù)雜對象的.簡單來說,淺拷貝只拷貝一層對象的屬性,而深拷貝則遞歸拷貝了所有層級。 淺拷貝 通過 Object.ass...
摘要:它將返回目標(biāo)對象。有些文章說是深拷貝,其實(shí)這是不正確的。深拷貝相比于淺拷貝速度較慢并且花銷較大??截惽昂髢蓚€(gè)對象互不影響。使用深拷貝的場景完全改變變量之后對沒有任何影響,這就是深拷貝的魔力。 一、賦值(Copy) 賦值是將某一數(shù)值或?qū)ο筚x給某個(gè)變量的過程,分為: 1、基本數(shù)據(jù)類型:賦值,賦值之后兩個(gè)變量互不影響 2、引用數(shù)據(jù)類型:賦址,兩個(gè)變量具有相同的引用,指向同一個(gè)對象,相互之間有...
閱讀 1720·2021-11-17 09:33
閱讀 3565·2021-11-16 11:40
閱讀 3081·2019-08-30 11:23
閱讀 1080·2019-08-29 16:36
閱讀 2494·2019-08-29 13:23
閱讀 1772·2019-08-29 12:59
閱讀 1580·2019-08-29 12:42
閱讀 2008·2019-08-28 18:22