欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

js數(shù)組直接賦值的問(wèn)題(js數(shù)組的淺拷貝與深拷貝方法)

 更新時(shí)間:2022年10月15日 09:02:56   作者:子夜_秋  
JS數(shù)組在直接賦值時(shí)屬于數(shù)組的淺拷貝,新數(shù)組保存的是原數(shù)據(jù)的內(nèi)存地址,修改新數(shù)組或原數(shù)組其中一個(gè)數(shù)組,另一個(gè)數(shù)組也會(huì)相應(yīng)的變化,數(shù)組的直接賦值屬于數(shù)組的淺拷貝,JS存儲(chǔ)對(duì)象都是存內(nèi)存地址

1、數(shù)組的直接賦值屬于數(shù)組的淺拷貝,JS存儲(chǔ)對(duì)象都是存內(nèi)存地址,所以淺拷貝會(huì)導(dǎo)致新數(shù)組和舊數(shù)組共用同一塊內(nèi)存地址,其中一個(gè)數(shù)組變化,另一個(gè)數(shù)組也會(huì)相應(yīng)的變化。

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

//結(jié)果: [30, 2, 3]   [30, 2, 3]

2、數(shù)組內(nèi)部不含有引用類型,使用slice() 、concat() 和 assign() 方法都屬于數(shù)組的深拷貝,一個(gè)數(shù)組變化,另一個(gè)數(shù)組不受影響。

數(shù)組的concat方法

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

//結(jié)果:[30, 2, 3]  [1, 2, 3]

使用es6的展開(kāi)操作符: …arr

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

//結(jié)果:[30, 2, 3]  [1, 2, 3] [1, 2, 3]

利用split join map方法

let arr1=[1,2,3];
var newArr4 = arr1.join(" ").split(" ").map(function(i){
    return parseInt(i);
    
}); 
arr1[0]=30;
console.log(arr1,newArr4);

//VM1175:1 (3) [30, 2, 3] (3) [1, 2, 3]

3、數(shù)組內(nèi)部含有引用類型,使用slice() 、concat() 和 assign() 方法,非引用類型的值屬于深拷貝,引入類型的值屬于淺拷貝,一個(gè)數(shù)組變化,另一個(gè)也會(huì)相應(yīng)的變化。

4、深拷貝就是指完全的拷貝一個(gè)對(duì)象,即使嵌套了對(duì)象,兩者也相互分離,修改一個(gè)對(duì)象的屬性,也不會(huì)影響另一個(gè)。

1、通過(guò)JSON.stringify轉(zhuǎn)化成字符串再通過(guò)JSON.parse()解析成原數(shù)組。

let arr=[{a:1,b:2},{a:3,b:4}]; 
let arr1=JSON.parse(JSON.stringify(arr)); 
arr[0].a=10;
console.log(arr,arr1); 

//輸出結(jié)果如下
(2)?[{…}, {…}]
    0: {a: 10, b: 2}
    1: {a: 3, b: 4}

(2)?[{…}, {…}]
    0: {a: 1, b: 2}
    1: {a: 3, b: 4}

2、利用jQuery的$.extend方法。

let arr=[{a:1,b:2},{a:3,b:4}]; 
let arr1=$.extend(true,[],arr); 
arr[0].a=10;
console.log(arr,arr1); 

//輸出結(jié)果如下
(2) [{…}, {…}]
    0: {a: 10, b: 2}
    1: {a: 3, b: 4}
    
(2) [{…}, {…}, contains: ?, each: ?, uniquelize: ?]
    0: {a: 1, b: 2}
    1: {a: 3, b: 4}

更多關(guān)于js數(shù)組直接賦值的問(wèn)題和js數(shù)組的淺拷貝,深拷貝方法請(qǐng)查看下面的相關(guān)文章

相關(guān)文章

  • Three.js源碼閱讀筆記(物體是如何組織的)

    Three.js源碼閱讀筆記(物體是如何組織的)

    這一篇將主要討論Three.js中的物體是如何組織的:即如何將頂點(diǎn)、表面、材質(zhì)組合成為一個(gè)具體的對(duì)象,需要了解的朋友可以參考下
    2012-12-12
  • 用JavaScript顯示瀏覽器客戶端信息的超相近教程

    用JavaScript顯示瀏覽器客戶端信息的超相近教程

    這篇文章主要介紹了用JavaScript顯示瀏覽器客戶端信息的超相近教程,包含了從返回桌面瀏覽器客戶端內(nèi)核信息到移動(dòng)端瀏覽器以及其使用的系統(tǒng)版本信息等內(nèi)容,傾力推薦!需要的朋友可以參考下
    2015-06-06
  • javascript的面向?qū)ο缶幊桃黄饋?lái)看看

    javascript的面向?qū)ο缶幊桃黄饋?lái)看看

    這篇文章主要為大家詳細(xì)介紹了javascript的面向?qū)ο缶幊?,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • javascript事件模型介紹

    javascript事件模型介紹

    在各種瀏覽器中存在三種事件模型:原始事件模型( original event model),DOM2事件模型,IE事件模型.其中原始的事件模型被所有瀏覽器所支持,而DOM2中所定義的事件模型目前被除了IE以外的所有主流瀏覽器支持。
    2016-05-05
  • Javascript中的數(shù)學(xué)函數(shù)集合

    Javascript中的數(shù)學(xué)函數(shù)集合

    Javascript中的數(shù)學(xué)函數(shù)集合...
    2007-05-05
  • 了解javascript中的Dom操作

    了解javascript中的Dom操作

    DOM 給我們提供了一些方法,讓我們可以使用js來(lái)控制頁(yè)面中的標(biāo)簽等。下面小編和大家來(lái)一起學(xué)習(xí)下吧
    2019-05-05
  • 如何學(xué)習(xí)Javascript入門指導(dǎo)

    如何學(xué)習(xí)Javascript入門指導(dǎo)

    首先要說(shuō)明的是,咱現(xiàn)在不是高手,最多還是一個(gè)半桶水,算是入了JS的門
    2013-11-11
  • javascript類型系統(tǒng)——undefined和null全面了解

    javascript類型系統(tǒng)——undefined和null全面了解

    下面小編就為大家?guī)?lái)一篇javascript類型系統(tǒng)——undefined和null全面了解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-07-07
  • js中parseInt函數(shù)淺談

    js中parseInt函數(shù)淺談

    這篇文章介紹了Js中的parseInt函數(shù),有需要的朋友可以參考一下
    2013-07-07
  • javascript學(xué)習(xí)指南之回調(diào)問(wèn)題

    javascript學(xué)習(xí)指南之回調(diào)問(wèn)題

    回調(diào)函數(shù)被認(rèn)為是一種高級(jí)函數(shù),一種被作為參數(shù)傳遞給另一個(gè)函數(shù)(在這稱作"otherFunction")的高級(jí)函數(shù),回調(diào)函數(shù)會(huì)在otherFunction內(nèi)被調(diào)用(或執(zhí)行)。回調(diào)函數(shù)的本質(zhì)是一種模式(一種解決常見(jiàn)問(wèn)題的模式),因此回調(diào)函數(shù)也被稱為回調(diào)模式。
    2016-04-04

最新評(píng)論