浅拷贝(Shallow) VS 深拷贝(Deep)
首先,深拷贝和浅拷贝针对的是对象类型(对象,数组,函数)。 浅拷贝指的是只是拷贝了对象的引用地址,彼此之间高耦合,一个改变,另一个可能也随之改变; 深拷贝是指只是完整的将变量的值拷贝过来,是一个新的对象,和被拷贝对象解耦合,一个改变,不会影响其它的内容。 浅拷贝 当对象有多层属性值时,只拷贝第一层, 是浅拷贝。如果被拷贝对象只有一层,下面的方法就是深拷贝。 1)对象遍历赋值 let copy = function(target,source){ for(let property in source){ target[property] = source[property] } return target; } 2) 对象合并函数Object.assign({})--复制可遍历属性(元属性enumerable为true) 当Object.assign(obj)只有一个参数时,相当于返回自身。 let copy = Object.assign(obj); // copy === obj// 注意:当obj的值为原始类型的值(boolean,string,number)时,会将原始值转为包装对象。当obj为undefined或者null时,无法转为对象会报错。 当Object.assign(target, source1, source2,...)有多个参数时,将第一个设为空对象{}//