对象浅拷贝的多种方式

155 阅读1分钟

浅拷贝:对另一个对象赋值。但是称之为浅拷贝是因为不能赋值深层次的值,如果属性是内存地址,即类似对象类型(引用类型),拷贝的就是内存地址 ,因此如果其中一个对象改变了这个地址,就会影响到另一个对象。

  1. 利用for..in进行拷贝
let obj = {name: 'han',age: 20}
  let tem = {}

  for (const key in obj) {
    tem[key] = obj[key]
  }
  console.dir(tem);//Object->age: 20,name: "han"

  1. 利用自带Object.assign属性(合并)

Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。

被赋值的也会改变,遇到相同属性会覆盖!

const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };

const returnedTarget = Object.assign(target, source);

console.log(target);
// expected output: Object { a: 1, b: 4, c: 5 }//被赋值的也会改变,遇到相同属性会覆盖!

console.log(returnedTarget);
// expected output: Object { a: 1, b: 4, c: 5 }
let obj = {name: 'han',age: 20}
let tem = Object.assign({},obj);
console.log(tem);//{name: "han", age: 20}
  1. 使用扩展运算符
let obj = {name: 'han',age: 20}
let tem = {...obj} 
console.log(tem);//{name: "han", age: 20}