成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

javascript中深拷貝與淺拷貝的區(qū)別是什么-創(chuàng)新互聯(lián)

深拷貝概念

成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供楊浦網(wǎng)站建設(shè)、楊浦做網(wǎng)站、楊浦網(wǎng)站設(shè)計(jì)、楊浦網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、楊浦企業(yè)網(wǎng)站模板建站服務(wù),十載楊浦做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

一個引用對象一般來說由兩個部分組成:一個具名的Handle,也就是我們所說的聲明(如變量)和一個內(nèi)部(不具名)的對象,也就是具名Handle的內(nèi)部對象。它在Manged Heap(托管堆)中分配,一般由新增引用對象的New方法是進(jìn)行創(chuàng)建。深拷貝是指源對象與拷貝對象互相獨(dú)立,其中任何一個對象的改動都不會對另外一個對象造成影響。舉個例子,一個人名叫張三,后來用他克隆(假設(shè)法律允許)了另外一個人,叫李四,不管是張三缺胳膊少腿還是李四缺胳膊少腿都不會影響另外一個人。比較典型的就是Value(值)對象,如預(yù)定義類型Int32,Double,以及結(jié)構(gòu)(struct),枚舉(Enum)等。

淺拷貝概念

淺拷貝只復(fù)制指向某個對象的指針,而不復(fù)制對象本身,新舊對象還是共享同一塊內(nèi)存。但深拷貝會另外創(chuàng)造一個一模一樣的對象,新對象跟原對象不共享內(nèi)存,修改新對象不會改到原對象。

JS中深拷貝和淺拷貝區(qū)別?

兩者的區(qū)別在于是否是真正獲取了一個對象的復(fù)制實(shí)體,而不是引用,深拷貝在計(jì)算機(jī)中開辟了一塊內(nèi)存地址用于存放復(fù)制的對象,而淺拷貝僅僅是指向被拷貝的內(nèi)存地址,如果原地址中對象被改變了,那么淺拷貝出來的對象也會相應(yīng)改變。

深拷貝

最簡單的方法就是

JSON.parse(JSON.stringify())
function deepCopy(o) {
    return JSON.parse(JSON.stringify(o))
}
var c = {
    age: 1,
    name: undefined,
    sex: null,
    tel: /^1[34578]\d{9}$/,
    say: () => {
        console.log('hahha')
    }
}
// { age: 1, sex: null, tel: {} }

需要注意的是:這種拷貝方法不可以拷貝一些特殊的屬性(例如正則表達(dá)式,undefine,function)

用遞歸去復(fù)制所有層級屬性

function deepCopyTwo(obj) {
    let objClone = Array.isArray(obj) ? [] : {};
    if (obj && typeof obj == 'object') {
        for (const key in obj) {
            //判斷obj子元素是否為對象,如果是,遞歸復(fù)制
            if (obj[key] && typeof obj[key] === "object") {
                objClone[key] = deepCopyTwo(obj[key]);
            } else {
                //如果不是,簡單復(fù)制
                objClone[key] = obj[key];
            }
        }
    }
    return objClone;
}

淺拷貝

object.assign(target,source)

Object.assign 方法只復(fù)制源對象中可枚舉的屬性和對象自身的屬性

如果目標(biāo)對象中的屬性具有相同的鍵,則屬性將被源中的屬性覆蓋。后來的源的屬性將類似地覆蓋早先的屬性

Object.assign 會跳過那些值為 [null] null 是一個 JavaScript 字面量,表示空值(null or an "empty" value),即沒有對象被呈現(xiàn)(no object value is present)。它是 JavaScript 原始值 之一。") 或 undefined 的源對象。

以上就是JS中深拷貝和淺拷貝區(qū)別?的詳細(xì)內(nèi)容,更多請關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司其它相關(guān)文章!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站標(biāo)題:javascript中深拷貝與淺拷貝的區(qū)別是什么-創(chuàng)新互聯(lián)
分享URL:http://jinyejixie.com/article42/dedghc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)品牌網(wǎng)站設(shè)計(jì)、面包屑導(dǎo)航、定制網(wǎng)站Google、網(wǎng)站建設(shè)

廣告

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

微信小程序開發(fā)
罗江县| 腾冲县| 汝城县| 社旗县| 登封市| 本溪市| 弥渡县| 瓦房店市| 攀枝花市| 绵竹市| 安龙县| 通山县| 海阳市| 塔河县| 弥勒县| 永定县| 离岛区| 黑水县| 平江县| 四子王旗| 察隅县| 辉县市| 阿荣旗| 深泽县| 英山县| 天津市| 伊宁市| 大港区| 高淳县| 湖口县| 华亭县| 莫力| 鄂托克前旗| 鲜城| 永安市| 英德市| 陆河县| 六安市| 汤阴县| 镇原县| 北碚区|