浅拷贝赋值的区别
赋值:引用地址的拷贝,无论的简单数据类型还是复杂数据类型,都会改变原数据。
浅拷贝:一层拷贝。在浅拷贝中,修改基本数据类型不会影响原有数据的基本数据类型,修改引用数据类型会影响原有的数据类型。
深拷贝:无限层的拷贝,不影响原数据
浅拷贝的实现方式
1.concat()
{ dictValue: '', dictDataName: '全部' }
].concat(this.dictionary['OUTER_NET_UP_STATUS'] || [])
- ...展开运算符
this.$set(this.form, name, [data, ...this.form[name]])
3.Object.assign()
Object.assign(this.info, this.currentRow)
4.slice()
const value = this.value.slice()
5.修改基本数据类型不会影响原有数据的基本数据类型,修改引用数据类型会影响原有的数据类型。
const s = [
1,
{
"username": "aaa"
}
]
const s1 = [...s]
s1.username = 'gqy'
// s = [
1,
{
"username": "gqy"
}
]
//基础类型直接返回,复杂数据类型就要做判断
const shallowCopy = (target) => {
if (typeof target === "object" && target !== null) {
const copyTarget = Array.isArray(target) ? [] : {};
for (let key in target) {
if (target.hasOwnProperty(key)) {
copyTarget[key] = target[key];
}
}
return copyTarget;
} else {
return target;
}
};