深拷贝和浅拷贝
深拷贝和浅拷贝
共同点:复制
1. 浅拷贝:复制引用,而不是真正的复制了值。
某一个改变互相影响
var arr1 = ['a','b']
var arr2 = arr1;
Object.assign()
2. 深拷贝:复制不是引用,复制了真正的值。
改变互相不影响
JSON.parse和自己封装
例子:
1.最简单的一种拷贝:浅拷贝
var arr1 = ['a','b','c','d']; var arr2 = arr1; arr1[0] = '你好吗'; arr2[1] = 'bbbbbbbb'; console.log( arr1,arr2 ); // 两个都一样 // [ // 0: "你好吗" // 1: "bbbbbbbb" // 2: "c" // 3: "d" // ]
2.浅拷贝 : Object.assign
var obj1 = {a:1,b:2} var obj2 = Object.assign(obj1); obj1.a = 'aaaaaa'; obj2.b = 'bbbbbb'; console.log( obj1, obj2 ); // { // a: "aaaaaa" // b: "bbbbbb" // }
深拷贝
var obj3 = {a:1,b:2}; var obj4 = JSON.parse( JSON.stringify(obj3) ) obj3.a = 'aaaaaa'; obj4.b = 'bbbbbb'; console.log( obj3,obj4); // obj3 // { // a: "aaaaaa" // b: 2 // } // obj4 // { // a: 1 // b: "bbbbbb" // }
自己实现:深拷贝
var obj5 = { a:1, b:2, c:3, o:{}, arr:[1,2,3] } function copyObj( obj ){ var newObj = {}; for( var key in obj ){ newObj[key] = obj[key]; } return newObj; } var obj6 = copyObj( obj5 ); obj5.a='aaaaa'; obj6.b='bbbbb'; console.log( obj5,obj6 )
本文来自博客园,作者:杨建鑫,转载请注明原文链接:https://www.cnblogs.com/qd-lbxx/p/16258617.html