js中对象和数组的浅拷贝和深拷贝,改变新数据,不影响原数据。

1.浅拷贝

定义: 个人理解为只是针对一层数据的拷贝有效,多层嵌套结构的数据则无效。

1.1 示例:Object.assign()

---数组的拷贝

let a1 = ['hello', '2018']
let b1 = Object.assign([], a1)
// 改变b1中的值
b1[0] = 'hi'
/**
 * 输出结果发现
 * 改变b1数据
 * a1数组没有改变,b1数组改变
 */
console.log(a1) // ['hello', '2018']
console.log(b1) // ['hi', '2018']
let a2 = [
  {
    name: 'java',
    count: 12
  },
  {
    name: 'js',
    count: 13
  }
]
let b2 = Object.assign([], a2)
// 改变b2数组中其中对象的count值
b2[0].count = 111
/**
 * 输出结果发现
 * 改变了b2数据
 * a1,b1数组都发生了改变
 */
console.log(a2)
console.log(b2)
---输出结果

---对象的拷贝 

let a1 = {
  name: 'Tom',
  age: 12
}
let b1 = Object.assign({}, a1)
b1.age = 100
/**
 * 结果显示,
 * a1中age没有被修改,b1的age被修改了
 */
console.log(a1)
console.log(b1) 
---输出结果

 

1.2  ES6的语法(...

let arr1 = ['ES6', 'let', 'const']
let arr2 = [...arr1]
arr2[0] = 'JavaScript'
console.log(arr1)
console.log(arr2)

输出结果

1.3 Array.from() 

浅拷贝中,当数组有对象时,改变新数组中对象的属性值,则会影响到原数据

let arr = ['apple', 'banana', 'pear']
let newArr = Array.from(arr)
newArr.pop()
console.log(arr) // ['apple', 'banana', 'pear']
console.log(newArr) // ['apple', 'banana']

 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 

2.深拷贝 

方法:JSON.parse(JSON.stringify())

let a1 = [
  {
    title: '标题1',
    color: 'red'
  },
  {
    title: '标题2',
    color: 'blue'
  }
]
let b1 = JSON.parse(JSON.stringify(a1))
b1[0].color = 'pink'
console.log(a1)
console.log(b1)

---输出结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值