欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

javascript拷貝,js函數(shù)拷貝

JavaScript怎樣進行真正有效的對象拷貝

有效的對象拷貝應(yīng)該是指深拷貝。

創(chuàng)新互聯(lián)主要從事成都網(wǎng)站設(shè)計、成都做網(wǎng)站、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)同安,十載網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792

淺拷貝 : 就是兩個js 對象指向同一塊內(nèi)存地址,所以當obj1 ,obj2指向obj3的時候,一旦其中一個改變,其他的便會改變!

深拷貝:就是重新復制一塊內(nèi)存,這樣就不會互相影響。

有些時候我們定義一個數(shù)組,把這個數(shù)據(jù)賦值給跟多對象數(shù)組中的一個字段,當我們改變對象數(shù)組中的該字段的時候,我們會把原來的數(shù)組也改變了,這樣就會引起其他數(shù)組對象中的對應(yīng)的字段改變,這不是我們想要的。

這個時候我們會用到深拷貝。

深拷貝的方法:

var?deepCopy?=?function(source)

{

var?result;

(source?instanceof?Array)???(result?=?[])?:?(result?=?{});

for?(var?key?in?source)?{

result[key]?=?(typeof?source[key]==='object')???deepCopy(source[key])?:?source[key];

}????

return?result;??

}

js實現(xiàn)深拷貝的幾種方法

簡單來說,深拷貝主要是將另一個對象的屬性值拷貝過來之后,另一個對象的屬性值并不受到影響,因為此時它自己在堆中開辟了自己的內(nèi)存區(qū)域,不受外界干擾。

淺拷貝主要拷貝的是對象的引用值,當改變對象的值,另一個對象的值也會發(fā)生變化。

使用 js ON.stringify和 js ON.parse實現(xiàn)深拷貝:JSON.stringify把對象轉(zhuǎn)成字符串,再用JSON.parse把字符串轉(zhuǎn)成新的對象;

缺陷:它會拋棄對象的 const ructor,深拷貝之后,不管這個對象原來的構(gòu)造 函數(shù) 是什么,在深拷貝之后都會變成Object;這種方法能正確處理的對象只有 Number, String, Boolean, Array, 扁平對象,也就是說,只有可以轉(zhuǎn)成JSON格式的對象才可以這樣用,像function沒辦法轉(zhuǎn)成JSON;

遞歸拷貝實現(xiàn)深拷貝,解決循環(huán)引用問題

JavaScript中淺拷貝和深拷貝的區(qū)別和實現(xiàn)

淺拷貝只是拷貝了引用, 數(shù)據(jù)在內(nèi)存中還是一個, 如果引用的對象發(fā)生了變化, 該變量也會同步變化.

深拷貝相當于把內(nèi)存上的數(shù)據(jù)拷貝了一份, 此時修改該變量不會影響原來的變量, 同理修改原來的變量也不會影響現(xiàn)在的變量.

淺拷貝:

const?foo?=?{?bar:?'bar',?baz:?'baz'?}

const?ref_foo?=?foo

深拷貝(最簡單的方法, 拷貝性能也不弱):

const?foo?=?{?bar:?'bar',?baz:?'baz'?}

const?ano_foo?=?JSON.parse(JSON.stringify(foo))

JS中實現(xiàn)深拷貝的幾種方法(object,Array)

4.通過第三方工具實現(xiàn)深拷貝

lodash.cloneDeep

數(shù)組深拷貝

1. concat(arr1, arr2,....)

2. slice(idx1, idx2)

參數(shù)可以省略

1)沒有參數(shù)是拷貝數(shù)組

2)只有一個參數(shù)是從該位置起到結(jié)束拷貝數(shù)組元素

3)兩個參數(shù),拷貝從起始位置到結(jié)束位置的元素(不包含結(jié)束位置的元素:含頭不含尾)

注意:當數(shù)組中的元素均為一維是深拷貝

? ? ? 數(shù)組中元素一維以上是值的引用

怎么實現(xiàn)javascript淺拷貝

//?淺拷貝

function?copy(o)?{

var?result?=?{};

for(var?i?in?o)

result[i]?=?o[i];

return?result;

}

//?深拷貝

function?deepCopy(o)?{

var?result?=?{};

for(var?i?in?o)?

result[i]?=?(typeof?o[i])?===?'object'???deepCopy(o[i])?:?o[i];

return?result;

}

這就是淺拷貝,大兄弟

標題名稱:javascript拷貝,js函數(shù)拷貝
鏈接分享:http://chinadenli.net/article47/dsepphj.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google云服務(wù)器關(guān)鍵詞優(yōu)化手機網(wǎng)站建設(shè)移動網(wǎng)站建設(shè)全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化