js中的數組和對象都是引用類型,其實說白了,數組的數據類型也是對象,因此我們在實際項目中需要注意,如果直接將一個對象賦值給另一個空對象,這個操作僅僅是讓兩個對象的指針指向了同一個地方。
此時的兩個對象中的任意一個的值發生改變,勢必都會影響到另一個。
let arr1=[1,2,3];
let arr2=arr1;
console.log(arr1,arr2)//[1,2,3],[1,2,3]
arr2.push(4);
console.log(arr1,arr2)//[1,2,3,4],[1,2,3,4]
但是我們在實際開發過程中常常會需要讓兩個對象賦值之後相互不影響,具體做法整理如下:
方法一:concat()方法
let arr1=[1,2,3];
let arr2=[].concat(arr1)
arr1//[1, 2, 3]
arr2//[1, 2, 3]
arr2.push(4)
arr1//[1, 2, 3]
arr2//[1, 2, 3,4]
方法二:JSON.stringify()+JSON.parse()
先轉換成字符串在轉換成數組
let arr1=[1,2,3];
let arr2=JSON.parse(JSON.stringify(arr1))
注意:對於對象數組,方法一不適用,應當使用方法二。具體如下:
let arr1=[
{
name:'a',
value:1
},
{
name:'b',
value:2
}
];
let arr2=[].concat(arr1);
arr1[0].value=23
方法三:ES6的擴展運算符 …
let arr1=[1,2,3];
let arr2=[...arr1];
方法四:jQuery的extend
let arr1=[1,2,3];
let arr2=$.extend(true,[],arr1);
方法五:Object.assign()
let arr1=[1,2,3];
let arr2=Object.assign([],arr1);
tip: 以上示例均採用的數組,對於對象同樣適用(除了方法一)