對象以及數(shù)組深拷貝

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]

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容