javascript中的对象相关方法三(浅拷贝)


前言

前两天看了一个朋友的博客,卧槽好几个常用的方法都是浅拷贝,平时使用的时候都没注意过。以后要注意一下,不然数据怎么改了自己都摸不着头脑。

朋友的文章地址:https://blog.csdn.net/qq_31947477/article/details/105989604?spm=1001.2014.3001.5502

浅拷贝

浅拷贝主要是用来复制对象的键值,当最外层键值是基础数据类型时,复制的是值;当最外层键值是引用类型时,只会复制其引用地址。下面几个方法都是对象或数组的浅拷贝。

Array.concat()

这个方法主要是用来数组合并。

const arr = [3, { age: 1, friends: { a: '1', b: '1' }}]
const array = [{ age: 4, friends: { a: '4', b: '4'}}].concat(arr)
console.log(array); // [{age:4,friends:{a:'4',b:'4'}},3,{age:1,friends:{a:'1',b:'1'}}]

# 改变最外层非引用类型键值时,不受影响
arr[0] = 4
console.log(array); // [{age:4,friends:{a:'4',b:'4'}},3,{age:1,friends:{a:'1',b:'1'}}]

# 改变引用类型值时会受影响
arr[1].age = 2
console.log(array); // [{age:4,friends:{a:'4',b:'4'}},3,{age:2,friends:{a:'1',b:'1'}}]

Array.slice()

数组截取,返回新的数组,同时不影响原数组。

const arr = [3, { age: 1,friends: { a: '1', b: '1' }}]
const array = arr.slice(0)
console.log(array);  // [ 3, { age: 1, friends: { a: '1', b: '1' } } ]

arr[1].age = 2
console.log(array); // [ 3, { age: 2, friends: { a: '1', b: '1' } } ]

剩余运算符…

const arr = [3, { age: 1,friends: { a: '1', b: '1' }}]
const array = [...arr]
array[1].age = 2
console.log(arr); // [ 3, { age: 2, friends: { a: '1', b: '1' } } ]

Object.assign()

对对象进行浅拷贝的方法。

const obj = { age: 1,friends: { a: '1', b: '1' }}
const newObj = Object.assign({}, obj, {ss: 'hahah'})
console.log(newObj); // { age: 1, friends: { a: '1', b: '1' }, ss: 'hahah' }

obj.age = 2
console.log(newObj); // { age: 1, friends: { a: '1', b: '1' }, ss: 'hahah' }

obj.friends.a = '2'
console.log(newObj); // { age: 1, friends: { a: '2', b: '1' }, ss: 'hahah' }

总结

开发中多注意这几个方法的使用,可以减少很多找bug的时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值