成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

面試篇---1 如何區(qū)分深拷貝與淺拷貝

jsdt / 2497人閱讀

摘要:引用數(shù)據(jù)類型名存在棧內(nèi)存中,值存在于堆內(nèi)存中,但是棧內(nèi)存會提供一個(gè)引用的地址指向堆內(nèi)存中的值,我們以上面淺拷貝的例子畫個(gè)圖當(dāng)進(jìn)行拷貝時(shí),其實(shí)復(fù)制的是的引用地址,而并非堆里面的值。

如何區(qū)分深拷貝與淺拷貝?

簡單來說,就是假設(shè)B復(fù)制了A,當(dāng)修改A時(shí),看B是否會發(fā)生變化,如果B也跟著變了,說明這是淺拷貝,拿人手短,如果B沒變,那就是深拷貝,自食其力。

淺拷貝例子:

 var a=[0,1,2,3,4],
       b=a;
    console.log(a===b);
    a[0]=1;
    console.log(a,b);  
    

嗯?明明b復(fù)制了a,為啥修改數(shù)組a,數(shù)組b也跟著變了,這里我不禁陷入了沉思。

那么這里,就得引入基本數(shù)據(jù)類型與引用數(shù)據(jù)類型的概念了。

面試常問,基本數(shù)據(jù)類型有哪些,number,string,boolean,null,undefined五類。

引用數(shù)據(jù)類型(Object類)有常規(guī)名值對的無序?qū)ο髙a:1},數(shù)組[1,2,3],以及函數(shù)等。

而這兩類數(shù)據(jù)存儲分別是這樣的:
a.基本類型--名和值存儲在棧內(nèi)存中,例如let a=1;

當(dāng)你b=a復(fù)制時(shí),棧內(nèi)存會新開辟一個(gè)內(nèi)存,例如這樣:

所以當(dāng)你此時(shí)修改a=2,對b并不會造成影響,因?yàn)榇藭r(shí)的b已自食其力,翅膀硬了,不受a的影響了。雖然b不受a影響,但這也算不上深拷貝,因?yàn)樯羁截惐旧碇会槍^為復(fù)雜的object類型數(shù)據(jù)。

b.引用數(shù)據(jù)類型--名存在棧內(nèi)存中,值存在于堆內(nèi)存中,但是棧內(nèi)存會提供一個(gè)引用的地址指向堆內(nèi)存中的值,我們以上面淺拷貝的例子畫個(gè)圖:

當(dāng)b=a進(jìn)行拷貝時(shí),其實(shí)復(fù)制的是a的引用地址,而并非堆里面的值。

而當(dāng)我們a[0]=1時(shí)進(jìn)行數(shù)組修改時(shí),由于a與b指向的是同一個(gè)地址,所以自然b也受了影響,這就是所謂的淺拷貝了。

那,要是在堆內(nèi)存中也開辟一個(gè)新的內(nèi)存專門為b存放值,就像基本類型那樣,豈不就達(dá)到深拷貝的效果了.

那么如何實(shí)現(xiàn)深拷貝呢?
1、我們可以借用JSON對象的parse和stringify

function deepClone(obj){
        var _obj = JSON.stringify(obj),
            objClone = JSON.parse(_obj);
        return objClone
    }
    var a=[0,1,[2,3],4],
        b=deepClone(a);
    a[0]=1;
    a[2][0]=1;
    console.log(a,b);
    


現(xiàn)在b完全不受a的影響了。

2、借用JQ的extend方法。

$.extend( [deep ], target, object1 [, objectN ] )
deep表示是否深拷貝,為true為深拷貝,為false,則為淺拷貝
target Object類型 目標(biāo)對象,其他對象的成員屬性將被附加到該對象上。
object1 objectN可選。 Object類型 第一個(gè)以及第N個(gè)被合并的對象。

let a=[0,1,[2,3],4],
    b=$.extend(true,[],a);
a[0]=1;
a[2][0]=1;
console.log(a,b);

。

其實(shí)深拷貝也不僅僅是為了應(yīng)付面試題, 在實(shí)際開發(fā)中也是非常有用的。 例如后臺返回了一堆數(shù)據(jù),你需要對這堆數(shù)據(jù)做操作,
但多人開發(fā)情況下,你是沒辦法明確這堆數(shù)據(jù)是否有其它功能也需要使用, 直接修改可能會造成隱性問題,深拷貝能幫你更安全安心的去操作數(shù)據(jù),
根據(jù)實(shí)際情況來使用深拷貝,大概就是這個(gè)意思。

原文鏈接https://www.cnblogs.com/echol...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/101506.html

相關(guān)文章

  • 「前端面試題系列9」淺拷貝拷貝的含義、區(qū)別及實(shí)現(xiàn)(文末有崗位內(nèi)推哦~)

    摘要:深拷貝與淺拷貝的出現(xiàn),就與這兩個(gè)數(shù)據(jù)類型有關(guān)。這時(shí),就需要用淺拷貝來實(shí)現(xiàn)了。數(shù)據(jù)一但過多,就會有遞歸爆棧的風(fēng)險(xiǎn)。這個(gè)方法是在解決遞歸爆棧問題的基礎(chǔ)上,加以改進(jìn)解決循環(huán)引用的問題。但如果你并不想保持引用,那就改用用于解決遞歸爆棧即可。 前言 這是前端面試題系列的第 9 篇,你可能錯(cuò)過了前面的篇章,可以在這里找到: 數(shù)組去重(10 種濃縮版) JavaScript 中的事件機(jī)制(從原生到...

    caige 評論0 收藏0
  • JS 中的拷貝與淺拷貝

    摘要:什么是深拷貝淺拷貝見名知義,無論是深拷貝還是淺拷貝,都是的問題。使用如下以上就是關(guān)于中的深拷貝與淺拷貝的知識和如何進(jìn)行深拷貝的知識了,如果有錯(cuò)或者有其他方式的話,歡迎在下面留言評論啦 前言 最近在寫項(xiàng)目的時(shí)候涉及到一些父子組件傳遞個(gè)對象或者數(shù)組通信啥的,或者是直接復(fù)制添加對象啥的,直接使用賦值的時(shí)候總會出錯(cuò)。一查原來是淺拷貝的問題,就從網(wǎng)上找了點(diǎn)資料,匯總到這里來了。 1 什么是深拷貝...

    ztyzz 評論0 收藏0
  • 7.JS之拷貝

    摘要:深拷貝與淺拷貝的區(qū)別如何區(qū)分深拷貝與淺拷貝,簡單點(diǎn)來說,就是假設(shè)復(fù)制了,當(dāng)修改時(shí),看是否會發(fā)生變化,如果也跟著變了,說明這是淺拷貝,拿人手短,如果沒變,那就是深拷貝,自食其力。 1.深拷貝與淺拷貝的區(qū)別 如何區(qū)分深拷貝與淺拷貝,簡單點(diǎn)來說,就是假設(shè)B復(fù)制了A,當(dāng)修改A時(shí),看B是否會發(fā)生變化,如果B也跟著變了,說明這是淺拷貝,拿人手短,如果B沒變,那就是深拷貝,自食其力。 2.棧堆、基本...

    dailybird 評論0 收藏0
  • JS每日一題:拷貝與淺拷貝的區(qū)別?如何實(shí)現(xiàn)一個(gè)拷貝

    摘要:期深拷貝與淺拷貝的區(qū)別如何實(shí)現(xiàn)一個(gè)深拷貝在回答這個(gè)問題前,我們先來回顧一下中兩大數(shù)據(jù)類型基本類型引用類型基本類型基本類型就是值類型存放在棧內(nèi)存中的簡單數(shù)據(jù)段,數(shù)據(jù)大小確定,內(nèi)存空間大小可以分配引用類型引用類型存放在堆內(nèi)存中的對象,變量實(shí)際保 20190311期 深拷貝與淺拷貝的區(qū)別?如何實(shí)現(xiàn)一個(gè)深拷貝 在回答這個(gè)問題前,我們先來回顧一下JS中兩大數(shù)據(jù)類型 基本類型 Undefined...

    MiracleWong 評論0 收藏0
  • js中拷貝與淺拷貝(堆內(nèi)存、棧內(nèi)存的關(guān)系)

    摘要:而堆內(nèi)存主要負(fù)責(zé)像對象這種變量類型的存儲,如下圖引用類型中復(fù)制淺拷貝的只是棧內(nèi)存中的指針,指向同一個(gè)堆內(nèi)存的對象如何實(shí)現(xiàn)深拷貝最簡單的方法就是與方法 淺拷貝只會在引用類型中出現(xiàn) 基本數(shù)據(jù)類型有哪些,number,string,boolean,null,undefined,symbol以及未來ES10新增的BigInt(任意精度整數(shù))七類。 引用數(shù)據(jù)類型(Object類)有常規(guī)名值對的無...

    AlienZHOU 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<