js數(shù)組直接賦值的問(wèn)題(js數(shù)組的淺拷貝與深拷貝方法)
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)文章
javascript的面向?qū)ο缶幊桃黄饋?lái)看看
這篇文章主要為大家詳細(xì)介紹了javascript的面向?qū)ο缶幊?,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02Javascript中的數(shù)學(xué)函數(shù)集合
Javascript中的數(shù)學(xué)函數(shù)集合...2007-05-05如何學(xué)習(xí)Javascript入門指導(dǎo)
首先要說(shuō)明的是,咱現(xiàn)在不是高手,最多還是一個(gè)半桶水,算是入了JS的門2013-11-11javascript類型系統(tǒng)——undefined和null全面了解
下面小編就為大家?guī)?lái)一篇javascript類型系統(tǒng)——undefined和null全面了解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07javascript學(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