关于引用类型:数组和对象的赋值

更多文章可关注我的个人博客:https://seven777777.github.io/myblog/

js中的数组和对象都是引用类型,其实说白了,数组的数据类型也是对象,因此我们在实际项目中需要注意,如果直接将一个对象赋值给另一个空对象,这个操作仅仅是让两个对象的指针指向了同一个地方。

此时的两个对象中的任意一个的值发生改变,势必都会影响到另一个。

let arr1=[1,2,3];
let arr2=arr1;
console.log(arr1,arr2)//[1,2,3],[1,2,3]
arr2.push(4);
console.log(arr1,arr2)//[1,2,3,4],[1,2,3,4]

但是我们在实际开发过程中常常会需要让两个对象赋值之后相互不影响,具体做法整理如下:

方法一:concat()方法
let arr1=[1,2,3];
let arr2=[].concat(arr1)
arr1//[1, 2, 3]
arr2//[1, 2, 3]
arr2.push(4)
arr1//[1, 2, 3]
arr2//[1, 2, 3,4]
方法二:JSON.stringify()+JSON.parse()

先转换成字符串在转换成数组

let arr1=[1,2,3];
let arr2=JSON.parse(JSON.stringify(arr1))

注意:对于对象数组,方法一不适用,应当使用方法二。具体如下:

let arr1=[
    {
        name:'a',
        value:1
    },
    {
        name:'b',
        value:2
    }
];
let arr2=[].concat(arr1);
arr1[0].value=23

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m6B3QF0R-1591080410527)(https://seven777777.github.io/blog-demo/images/1.png)]

方法三:ES6的扩展运算符 …
let arr1=[1,2,3];
let arr2=[...arr1];
方法四:jQuery的extend
let arr1=[1,2,3];
let arr2=$.extend(true,[],arr1);
方法五:Object.assign()
let arr1=[1,2,3];
let arr2=Object.assign([],arr1);

tip: 以上示例均采用的数组,对于对象同样适用(除了方法一)

搴芳拾梦
欢迎关注的我的个人公众号【搴芳拾梦】
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值