js浅拷贝的实现方式

我们知道,对象类型的赋值其实是复制了地址,这就会导致,我改变了一方,其他也都跟着改变了。

下雨天

我们在开发中通常不希望出现这样的问题,此时我们可以使用「浅拷贝」。

1、我们可以使用Object.assign()来进行浅拷贝,这个函数会拷贝所有的属性值到新对象中。如果属性值是对象,那么拷贝的就是「地址」。

let a = {
  age: 1
}
let b = Object.assign({}, a)
a.age = 2
console.log(b.age)  // 1

2、我们还能通过展开运算符...来实现浅拷贝:

let a = {
  age: 1
}
let b = { ...a }
a.age = 2
console.log(b.age) // 1

注:通常浅拷贝就能解决大部分问题了,但是遇到下面这种情况就需要使用「深拷贝」了:

let a = {
  age: 1,
  hobbies: {
    first: '篮球'
  }
}
let b = { ...a }
a.hobbies.first = '足球'
console.log(b.hobbies.first) // 足球