老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

使用javascript怎么實現深淺拷貝-創新互聯

使用javascript怎么實現深淺拷貝?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

十余年的清遠網站建設經驗,針對設計、前端、開發、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。全網營銷推廣的優勢是能夠根據用戶設備顯示端的尺寸不同,自動調整清遠建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優雅布局與設計,從而大程度地提升瀏覽體驗。創新互聯從事“清遠網站設計”,“清遠網站推廣”以來,每個客戶項目都認真落實執行。

JavaScript的特點

1.JavaScript主要用來向HTML頁面添加交互行為。 2.JavaScript可以直接嵌入到HTML頁面,但寫成單獨的js文件有利于結構和行為的分離。 3.JavaScript具有跨平臺特性,在絕大多數瀏覽器的支持下,可以在多種平臺下運行。

基本類型復制:

var a = 1;
var b = a;//復制
console.log(b)//1
a = 2;//改變a的值
console.log(b)//1
console.log(a) //2

因為a,b都是屬于基本類型,基本類型的復制是不會影響對方的,因為基本類型是每一次創建變量都會在棧內存中開辟一塊內存,用來存放值,所以基本類型進行復制是不會對另外一個變量有影響的;

引用類型復制:

引用類型的復制我們分為數組的復制和對象的復制兩個方面來進行講解:

js的淺拷貝:

var arr1 = ['red','green'];
var arr2 = arr1;//復制
console.log(arr2)//['red','green'];
arr1.push('black') ;//改變color1的值
console.log(arr2)//['red','green','black']
console.log(arr1) //["red", "green", "black"]

上面的案例是javascript數組的淺拷貝,通過上面的知識我們可以看知道數組是引用類型數據,引用類型數據復制是會進行相互影響的,我們看到arr1.push('black')添加了一個新的子項,因為上面var arr2=arr1這行代碼是將兩個引用類型數據的地址指針指向了同一塊堆內存區域,所以不管是arr1還是arr2修改,任何一個一個改動兩個數組都是會互相產生影響的;上面的那種直接賦值方式的復制就是我們常說的引用類型的淺拷貝;

關于深拷貝很多同學都誤以為js的原生方法concat、slice是屬于深拷貝,其實不是的;js的原生方法concat、slice都是僅適用于一維數組,一旦到了二維數組或者多維數組中就會出現問題,就出現拷貝的不夠徹底導致還是會發生數據的相互牽引問題;

slice:

var arr1 = ['red','green'];
var arr2 = arr1.slice(0);//復制
console.log(arr2)//['red','green'];
arr1.push('black') ;//改變color1的值
console.log(arr2)//["red", "green"]
console.log(arr1)//["red", "green", "black"]

js原生的方法slice會返回一個新的數組,上述代碼乍一看會以為是深拷貝,因為arr2和arr1相互復制和牽引,而當arr1調用了push方法添加了新數組子項的時候,arr2沒有發生變化;是的,這是符合深拷貝的特性,但是拷貝的不夠徹底,所以還不能算是真正意義上的深拷貝,所以slice只能被稱為淺拷貝;slice方法只適用于一維數組的拷貝,在二維數組中就會破綻百出;

下面我們再來看一下二維數組的例子:

var arr1=[1,2,3,['1','2','3']];
var arr2=arr1.slice(0);
 arr1[3][0]=0;
 console.log(arr1);//[1,2,3,['0','2','3']]
 console.log(arr2);//[1,2,3,['0','2','3']]

上述代碼是一個二維數組,當我們在arr1[3][0]里面進行更改arr1的值的時候,我們發現arr1、arr2兩個數組的值都發生了變化;所以事實證明slice不是深拷貝;

concat:

var arr1 = ['red','green'];
var arr2 = arr1.concat();//復制
console.log(arr2)//['red','green'];
arr1.push('black') ;//改變color1的值
console.log(arr2)//["red", "green"]
console.log(arr1)//["red", "green", "black"]
var arr1=[1,2,3,['1','2','3']];
var arr2=arr1.concat();
 arr1[3][0]=0;
 console.log(arr1);//[1,2,3,['0','2','3']]
 console.log(arr2);//[1,2,3,['0','2','3']]

concat方法在一維數組中是不會影響源數組的數據的,而在二維數組中concat的表現和slice是一樣的;

js的深拷貝:

js數組中實現深拷貝的方法都多種,比如JSON.parse(JSON.stringify())和遞歸以及JQuery庫的extend方法(只是extend方法需要依賴JQuery庫,所以我們盡量的使用原生的方式來實現)都是可以實現數組和對象的深拷貝的;

var arr1 = ['red','green'];
var arr2 = JSON.parse(JSON.stringify(arr1));//復制
console.log(arr2)//['red','green'];
arr1.push('black') ;//改變color1的值
console.log(arr2)//["red", "green"]
console.log(arr1)//["red", "green", "black"]

上述代碼中我們可以清晰的看到JSON.parse(JSON.stringify())是真正意義上實現了深拷貝;

遞歸實現深拷貝:

function deepClone(obj){
  //判斷參數是不是一個對象
  let objClone = obj instanceof Object?[]:{};
  if(obj && typeof obj==="object"){
    for(key in obj){
      if(obj.hasOwnProperty(key)){
        //判斷ojb子元素是否為對象,如果是,遞歸復制
        if(obj[key]&&typeof obj[key] ==="object"){
          objClone[key] = deepClone(obj[key]);
        }else{
          //如果不是,簡單復制
          objClone[key] = obj[key];
        }
      }
    }
  }
  return objClone;
}  

var a ={
  x:1,
  y:2
};
b=deepClone(a);
a.x=3
console.log(a);
console.log(b);

輸出效果如下:

使用javascript怎么實現深淺拷貝

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注創新互聯成都網站設計公司行業資訊頻道,感謝您對創新互聯成都網站設計公司的支持。

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


本文標題:使用javascript怎么實現深淺拷貝-創新互聯
文章起源:http://www.xueling.net.cn/article/dspesg.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 国产FREEXXXX性播放麻豆 | 人人草久久| 国产又爽又刺激的视频 | 国产精品嫩草影院久久 | 2018天天躁夜夜躁狠狠躁 | 99久久精品无码一区二区毛片免费 | 欧美精品一区二区视频 | 亚洲蜜臀av国产aⅴ综合小说 | 日日射天天干 | 少妇被躁爽到高潮无码久久 | 免费播放大片免费观看视频 | 一区二区三区麻豆 | 深夜福利网站 | 国产欧美一区二区三区观看不卡 | 柠檬av导航 | 亚洲天堂中文字幕在线 | 国产无遮挡又黄又爽不要VIP网站 | 亚洲人和日本人jzz视频 | 超碰天天操 | 久久黄色视 | 美女黄a一级视频 | 青草伊人网 | 激情综合色五月六月婷婷 | 精品国产乱码久久久久久影片 | 国产一区二区成人久久免费影院 | 天天干天天操天天搞 | 日本护士吞精囗交gif | 日韩一级网站 | 911网站大全在线?看 | 日本在线不卡视频 | 日韩精品视频一区二区三区 | 国产一在线精品一区在线观看 | 一区二区伦理 | 高清国产一区二区三区 | 一本之道加勒比在线观看 | av色久 | 国产AV无码专区亚洲AV中文 | 国产成人亚洲中文字幕视频 | 亚洲熟妇中文字幕五十中出 | 老汉色老汉首页a亚洲 | 蜜桃av影院 |