问题描述

引用类型的数据之间直接赋值会使其指向同一个地址,当其中一个数据发生改变另外一个数据会同步发生改变,但在实际开发中需要两个数据独立不能互相影响。

引用类型数据正确赋值方式

  • 使用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))
})
最后修改:2022 年 09 月 13 日
如果觉得我的文章对你有用,请随意赞赏