Object.assign()

2018-03-01  本文已影响0人  楼下的黑猫不太冷

参考: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

Oject.assign()方法将源对象上的属性拷贝到目标对象,最后返回目标对象。
语法

Object.assign(target, ...sources);

特点: 浅拷贝,只是数据的引用(浅拷贝拷贝的是栈空间内存地址,并不是拷贝的内容)

function test() {
  'use strict';

  let obj1 = { a: 0 , b: { c: 0}};
  let obj2 = Object.assign({}, obj1);
  console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}}
  
  obj1.a = 1;
  console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}}
  console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}}
  
  obj2.a = 2;
  console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}}
  console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 0}}
  
  obj2.b.c = 3;
  console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 3}}
  console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 3}}
  
  // Deep Clone
  obj1 = { a: 0 , b: { c: 0}};
  let obj3 = JSON.parse(JSON.stringify(obj1));
  obj1.a = 4;
  obj1.b.c = 4;
  console.log(JSON.stringify(obj3)); // { a: 0, b: { c: 0}}
}

test();

对于相同属性的数据,后面的数据会覆盖前面的数据,比如数组,对象

// 对象
var o1 = { a: 1, b: 1, c: 1 };
var o2 = { b: 2, c: 2 };
var o3 = { c: 3 };

var obj = Object.assign({}, o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 } ,b改变为2,c改变为3

// 数组
var arr1 = [1, 2, 3];
var arr2 = [4, 5, 6];

var arr= Object.assign({}, arr1, arr2);
console.log(arr); // { '0': 4, '1': 5, '2': 6 } 会隐式转化为对象
上一篇下一篇

猜你喜欢

热点阅读