淺復(fù)制深拷貝

了解之前,首先要知道什么是值類(lèi)型和應(yīng)用類(lèi)型

  • 常見(jiàn)的值類(lèi)型有:數(shù)值、布爾值、null、undefined。
  • 常見(jiàn)的引用類(lèi)型有:對(duì)象、數(shù)組、函數(shù)。

用代碼來(lái)詳細(xì)理解

var arr1=[1,2,3,4];
var arr2=arr1;
arr1.push(5)
console.log(arr1);//1,2,3,4,5
console.log(arr2);//1,2,3,4,5

這里只改變了arr1,而arr2的值也改變了,這是因?yàn)槎xarr1時(shí),創(chuàng)建了一個(gè)空間,并且arr1指向它,再定義一個(gè)arr2,如果讓arr2=arr1,就相當(dāng)于把a(bǔ)rr2也指向了arr1所指向的空間,所以改變arr1或arr2都可以改變這個(gè)空間里面的值,這就是引用類(lèi)型。如果var arr2=[],讓他等于一個(gè)新的數(shù)組,就會(huì)定義一個(gè)新的空間,而把a(bǔ)rr2=arr1再次寫(xiě)進(jìn)去時(shí),相當(dāng)于把a(bǔ)rr1的指向有賦給了arr2,所以有變成上面的樣子。僅個(gè)人理解。

有什么方法能讓arr2==arr1&&arr2和arr1不會(huì)相互影響?

var arr1=[1,2,3,4,5];
var arr2=copy(arr1);
function copy(arr){
    var arrs=[];
    for(let i=0;i<arr.length;i++){
        arrs.push(arr1[i])
    }
    return arrs
}

這樣就可以實(shí)現(xiàn)想要的功能;

下面,如果是一個(gè)對(duì)象,對(duì)象里面有數(shù)組,實(shí)現(xiàn)上面相同的功能

    var obj = { a:1, arr: [2,3] };
    var shadowObj = shadowCopy(obj);

    function shadowCopy(src) {
      var dst = {};
      for (var prop in src) {
      console.log(src.hasOwnProperty(prop))//判斷src里面有沒(méi)有這個(gè)屬性
        if (src.hasOwnProperty(prop)) {

          dst[prop] = src[prop];
        }
      }
      return dst;
    }

改變obj,看shadowObj是否會(huì)發(fā)生變化
obj.name="小明"
console.log(obj);// { a:1, arr: [2,3],name:'小明' }
console.log( shadowObj );// { a:1, arr: [2,3] }


雖然看著的確是實(shí)現(xiàn)了功能,但是里面的數(shù)組還是有問(wèn)題的;

obj.arr[0]=9;
console.log(obj.arr[0]);//9
console.log(shadowObj.arr[0]);//9

這是因?yàn)樵诒闅v復(fù)制時(shí),把數(shù)組對(duì)象直接的指向復(fù)制進(jìn)去,所以這里的對(duì)象還是引用類(lèi)型,如果需要的話(huà),可以在上面代碼的基礎(chǔ)上面做判斷

if(prop==arr){
    for(){
        把數(shù)組再遍歷一遍
    }
}


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文為轉(zhuǎn)載: 作者:zyydeveloper 鏈接:http://www.itdecent.cn/p/5f776a...
    Buddha_like閱讀 1,021評(píng)論 0 2
  • http://blog.csdn.net/david21984/article/details/57451917 ...
    紫色冰雨閱讀 663評(píng)論 0 0
  • 塞滿(mǎn)了整個(gè)後備箱,及半個(gè)後排和副駕駛,好有回家的感覺(jué)?;丶疫^(guò)年咯!
    精尚閱讀 210評(píng)論 0 0
  • 人喜群居,害怕孤獨(dú)。所以,古往今來(lái),陪伴顯得格外珍貴,尤其是長(zhǎng)久的陪伴。 愿得一心人,白首不相離。 ...
    深圳芒果樹(shù)閱讀 168評(píng)論 1 1
  • 房子本不是必需品,買(mǎi)的人多了,自然蹬鼻子上臉,變得尤其重要;房子本不該是昂貴之物,炒的人多了,便身價(jià)倍漲;房子本該...
    HIMA醬閱讀 681評(píng)論 2 2

友情鏈接更多精彩內(nèi)容