var arr1 = [1, 2];
var arr2 = arr1;
console.log(arr1); //[1, 2]
console.log(arr2); //[1, 2]
arr1.push(6);
?arr2.push(7);
console.log(arr1); //[1, 2, 6, 7]
console.log(arr2); //[1, 2, 6, 7]
由以上操作可知簡單的 = 賦值都不能達到預想效果,不是新建一個和原對象(數(shù)組也是對象)完全一樣的對象,而是把原對象的內存地址直接復制給了另一個對象,也就是說兩個對象都是指向同一個內存地址
方法一:?[].concat()
var arr1 = [1, 2];
var arr2 = [].concat(arr1);
console.log(arr1);//[1, 2]
console.log(arr2);//[1, 2]
arr1.push(6);
arr2.push(7);
console.log(arr1);//[1, 2, 6]
console.log(arr2);//[1, 2, 7]
方法二:JSON.parse(JSON.stringify())
var arr1 = [1, 2];
var arr2 = JSON.parse(JSON.stringify(arr1));
console.log(arr1); //[1, 2]
console.log(arr2); //[1, 2]
arr1.push(6);
arr2.push(7);
console.log(arr1); //[1, 2, 6]?
console.log(arr2); //[1, 2, 7]
方法三:Object.assign({}, arr1);
var arr1 = { a: 0 };
var arr2 = Object.assign({}, arr1);
?console.log(arr1); //{ a: 0 }
console.log(arr2); //{ a: 0 }
arr2.b = 2;
arr1.c = 3;
?arr1.a = 4;
console.log(arr1); //{ a: 4, c: 3}
console.log(arr2); //{ a: 0, b: 2 }
arr2.a = 5;
console.log(arr1); //{ a: 4, c: 3}
console.log(arr2); //{ a: 5, b: 2 }
方法四?直接遍歷
var array = [1, 2, 3, 4];
var copyArray = array.slice();
copyArray[0] = 100;
console.log(array); // [1, 2, 3, 4]
console.log(copyArray); // [100, 2, 3, 4]
方法五?slice() 返回一個從已有的數(shù)組中截取一部分元素返回新數(shù)組(不改變原數(shù)組)
var array = [1, 2, 3, 4];
var copyArray = array.slice();
copyArray[0] = 100;
console.log(array); // [1, 2, 3, 4]
console.log(copyArray); // [100, 2, 3, 4]