问题描述
引用类型的数据之间直接赋值会使其指向同一个地址,当其中一个数据发生改变另外一个数据会同步发生改变,但在实际开发中需要两个数据独立不能互相影响。
引用类型数据正确赋值方式
- 使用concat方法
let arr1=[1,2,3]
let arr2=[4,4,6]
arr2=[].concat(arr1)
- JSON.stringify()+JSON.parse()
let arr1=[
{
name:'aaa',
age:12
},
{
name:'bbb',
age:13
}
]
let arr2=[
{
name:'aaa',
age:12
},
{
name:'bbb',
age:13
}
]
arr2=JSON.parse(JSON.stringify(arr1))
此方法适用于数组对象的赋值,普通解构赋值对于数组对象数据依然存在引用关系
- es6拓展运算符
let arr1=[1,3,2]
let arr2=[]
arr2=[...arr1]
- Object.assign方法
let arr1=[1,2,2,3]
let arr2=[]
arr2=Object.assign([],arr1)
对于数组对象类型数据还可使用for循环结合Object.assign方法
let arr1=[
{
name:'aaa',
age:12
},
{
name:'bbb',
age:13
}
]
let arr2=[]
arr1.forEarch(item=>{
arr2.push(Object.assign({},item))
})