改變原陣列
state =
const newarray =
this
.state.array
newarray[0]
='1'
newarray // ['1', '0', '0']
this
.state.array // ['1', '0', '0']
當新的陣列改變時,源陣列也發生了改變,這不是深拷貝
正確的拷貝方式
state =
// 方法一
const newarray =
this
.state.array.
slice()
// 不修改原來的陣列
// 方法二
const newarray =
[...
this
.state.array]
// 不修改原來的陣列
newarray[0]
='1'
newarray // ['1', '0', '0']
this
.state.array // ['0', '0', '0']
push()
方法:使用會改變原陣列
concat()
方法:使用不會改變原陣列
object.assign()
用於將所有可列舉屬性的值從乙個或多個源物件中複製到目標物件, 它將返回目標物件
const obj =
const obj2 = object.
assign
(, obj)
// obj2.a =
2cosnole.
log(obj, obj2)
//
結構賦值
let obj =
let obj2 =
obj2.a =
2console.
log(obj, obj2)
//
json.stringify
和json.parse()
let obj =
let obj2 =
json
.parse
(json
.stringify
(obj)
)obj2.a =
2console.
log(obj, obj2)
//
物件陣列的深拷貝和物件的深拷貝
1 對於 普通陣列 陣列元素為數字或者字串 深拷貝很簡單,拷貝之後兩個陣列指標指向的儲存位址不同,從而完成深拷貝 var test 1,2,3 原陣列 var testcopy concat test 拷貝陣列 testcopy 0 4 console.log test 1,2,3 console....
陣列和物件的淺拷貝和深拷貝
前言 對於拷貝需要考慮資料的型別 資料型別分為 基本資料型別和引用型別 基本資料型別是儲存在棧中的簡單資料 常見 string,number,undefined,null,boolean以及es6新定義的symbol 引用型別值是引用型別例項,它是儲存在堆中的乙個物件,引用型別是一中資料結構 常見 ...
陣列,物件的拷貝方式(深拷貝和淺拷貝)
引言typeof 檢測arr或者物件的時候只會返回 object 引用資料型別 一般來說就是函式 物件 陣列 1.遞迴方式 function isobject obj var deepclone function obj return num 最後返回num console.log deepclon...