js 實現深拷貝

2022-07-30 13:54:16 字數 1072 閱讀 7813

在ecmascript變數中包含兩種不同型別的值:基本型別值和引用型別值。

基本型別值:undefined、null、boolean、number、string

引用型別值:object、array、函式等

簡單點來說,宣告乙個陣列a、然後將其賦值給b、當修改b的值時,如果a的值沒有變化,說明它是深拷貝,如果a的值一起改變了,那它就是淺拷貝了。

實現深拷貝的一些方法

1.es6語法

var a=[1,2,3]

var [...b]=a;//

或b=[...a]

b.push(4);

console.log(b);

//1,2,3,4

console.log(a)//

1,2,3

2.使用concat()方法

var a=[1,2,3]

var c=;

var b=c.concat(a);

b.push(4);

console.log(b);

//1,2,3,4

console.log(a)//

1,2,3

3.使用slice()方法

var a=[1,2,3]

var b=a.slice(0);

b.push(4);

console.log(b);

//1,2,3,4

console.log(a)//

1,2,3

4.使用json物件的stringify和parse方法

var a=[1,2,3]

var c=json.stringify(a);

var b=json.parse(c);

b.push(4);

console.log(b);

//1,2,3,4

console.log(a)//

1,2,3

js實現深拷貝

深拷貝 深拷貝本身只針對較為複雜的object型別資料,但是含義的話比如基本資料型別a和b的賦值操作,賦值之後b有自己的記憶體空間,a,b之間互不影響 淺拷貝 引用資料型別 名存在棧記憶體中,值存在於堆記憶體中,但是棧記憶體會提供乙個引用的位址指向堆記憶體中的值。當b a進行拷貝時,其實複製的是a的...

JS 深拷貝實現

web平台上一直在刻意的避開深拷貝,一直使用json.parse json.stringify object 避開深拷貝的問題。知道今天碰見個bug,json將function轉化為了字串,排到這個bug時,憔悴 若是node.js平台的話,一直現成的輪子等著挑,可惜是web,不太敢亂引入,手寫乙個...

js實現深拷貝

var obj var newobj obj console.log newobj obj.number 2 console.log obj console.log newobj 發現此時newobj的number也變成了2,很顯然這不是我們想要的結果。往往我們開發專案中會大量用到賦值,卻發現之前原...