深拷貝和淺拷貝

2021-09-25 16:15:40 字數 960 閱讀 1037

物件儲存在堆中,js無法直接訪問儲存在堆記憶體中的資料,但可以通過引用方式來訪問或修改此類資料,將物件賦給另乙個物件後這兩個物件所指的記憶體位址為同乙個位址相互影響,改變乙個另乙個也就跟著變

var a=

b=ab.class="30"

console,log(a.class)//30

淺拷貝就只拷貝物件的第一層屬性,屬性下如果還有物件因為被引用指向同一片記憶體空間,新物件更改此類子物件會改變原物件相應的內容

var a=

b=object.assign({},a)

b.class="30"

console.log(a.class)//21

深拷貝是拷貝原物件上所有的內容,更改新物件不會影響原物件內容

1、json.parse(json.stringify(obj))//先將物件轉換成基本型別字串,

對其複製會進行值傳遞,開闢新的記憶體空間,將值傳遞進去,對其更改資料也不會對原物件造成影響

var a=

}var b=json.parse(json.stringify(a))

a.jobs.first='waiter'

console.log(b.jobs.first)//'doctor'

2、遞迴

var obj=

}function change(obj);

for(var i in obj)

}else

return person;

}var person1=change(obj)

console.log(person1 instanceof array)

person1.name='a'

person1.others.name='b'

console.log(obj,person1)

實現深拷貝的幾種方式:

深拷貝和淺拷貝

淺拷貝就是物件的資料成員之間的簡單賦值,如你設計了乙個沒有類而沒有提供它的複製建構函式,當用該類的乙個物件去給令乙個物件賦值時所執行的過程就是淺拷貝,如 class a a private int data int main 這一句b a 就是淺拷貝,執行完這句後b.data 5 如果物件中沒有其他...

淺拷貝和深拷貝

以下情況都會呼叫拷貝建構函式 乙個物件以值傳遞的方式傳入函式體 例如 已知class a,class b void func a a void func a a func b b 此時函式對b的操作是呼叫拷貝建構函式後的臨時拷貝物件。多數傳指標 乙個物件以值傳遞的方式從函式返回 如 return b...

深拷貝和淺拷貝

ios提供了copy和mutablecopy方法,顧名思義,copy就是複製了乙個imutable的物件,而mutablecopy就是複製了乙個mutable的物件。以下將舉幾個例子來說明。1 系統的非容器類物件 這裡指的是nsstring nsnumber等等一類的物件。nsstring stri...