1.什么是浅拷贝和深拷贝
javascript中一般有值传递和引用传递两种方式:
按值传递的是基本数据类型(Number,String,Boolean,Null,Undefined),直接用 = 传递,一般存放于内存中的栈区,存取速度快,存放量小;
按引用传递的是引用类型(Object,Array,Function,Symbol),一般存放与内存中的堆区,存取速度慢,存放量大,其引用指针存于栈区,并指向引用本身。
深拷贝和浅拷贝是相对于引用类型而言的:
浅拷贝: 指两个js 对象指向同一个内存地址,其中一个改变会影响另一个;
深拷贝: 指复制后的新对象重新指向一个新的内存地址,两个对象改变互不影响。
浅拷贝:
浅拷贝只会拷贝一层,深层的引用类型改变还是会受到影响。
1.自定义函数
function shallowClone (initalObj) {
var obj = {};
for ( var i in initalObj) {
obj[i] = initalObj[i];
}
return obj;
}
2.ES6 的 Object.assign()
let newObj = Object.assign({}, obj);
3.ES6 的对象扩展
let newObj = {...obj};