最近写代码经常会用到 object.assign进行拷贝操作 这次记录下来 希望加深影响并加深理解
let test = () => {
let srcArr = { name: '李四', age: '16' }
const copyArr = {};
Object.assign(copyArr, srcArr);
console.log(copyArr);//输出结果{name: '李四', age: '16'}
}
从代码和输出结果可以看到 object.assign主要进行对象的拷贝合并操作 我们来实习啊如果目标对象有相同属性的值会有什么效果
let srcArr = { name: '李四', age: '16' }
const copyArr = {name:'王五',sex:'男'};
Object.assign(copyArr, srcArr);
console.log(copyArr);//输出结果{name: '李四', sex: '男', age: '16'}
可以看到相对属性的值会做覆盖操作。拷贝我们都知道有深拷贝和浅拷贝那 通过object.assign是哪种拷贝呢 先解释一下什么是深拷贝和浅拷贝
- 对象的浅拷贝:浅拷贝是对象共用的一个内存地址,对象的变化相互影响。
- 对象的深拷贝:简单理解深拷贝是将对象放到新的内存中,两个对象的改变不会相互影响。
let test = () => {
let srcArr = { name: '李四', age: '16' }
const copyArr = {name:'王五',sex:'男'};
Object.assign(copyArr, srcArr);
srcArr.name='张三';
console.log(copyArr);//输出结果{name: '李四', sex: '男', age: '16'}
}
可以看到拷贝后修改原数据并没有影响拷贝后的对象,那应该是浅拷贝了 但是我们再做个代码尝试
let test = () => {
let srcArr = { name: '李四', age: '16',project:{name:'语文'} }
const copyArr = {name:'王五',sex:'男'};
Object.assign(copyArr, srcArr);
srcArr.name='张三';
srcArr.project.name='数学'
console.log(copyArr);
}
输出结果如下:
可以看到 虽然修改了name没有受到影响,但是修改project的name却影响了新的对象,也就是说,对于Object.assign()而言,如果对象的属性值为简单类型(string,number),那么是深拷贝;如果属性是对象或者引用类型,那么就是浅拷贝