var arr = [1,2,3];
var obj = {
i : 1,
j : 2
}
var arr1 = arr;
arr1[1] = 11;
console.log(arr);
console.log(arr1);
var obj1 =obj;
obj1.i = 11;
console.log(obj);
console.log(obj1);
運(yùn)行結(jié)果:

image.png
我們發(fā)現(xiàn),我們在改變arr1(obj1)后,原來的arr(obj)也跟著變了,原因是:復(fù)合類型的變量存的是指針
解決辦法:
可能我們第一會想到的是遍歷賦值,這樣雖然能解決問題,但是卻拉低了性能。
在js里面,我們可以這樣處理:數(shù)組用一個(gè)空數(shù)組連接,obj用一個(gè)空obj連接。
var arr = [1,2,3];
var obj = {
i : 1,
j : 2
}
var arr1 = arr.concat([]);
arr1[1] = 11
console.log(arr);
console.log(arr1);
var obj1 = Object.assign({},obj);
obj1.i = 11;
console.log(obj);
console.log(obj1);
運(yùn)行結(jié)果:

image.png