Object.assign

99 阅读1分钟

object.assign() 主要用于对象合并,将源对象中的属性复制到目标对象中,他将返回目标对象.

Object.assign(target, ...sources)

  1. 如果有同名属性的话,后面的属性值会覆盖前面的属性值
  2. 原始类型会被包装为对象
  3. 浅拷贝,当对象中只有一级属性,没有二级属性的时候,此方法为深拷贝,但是对象中有对象的时候,此方法,在二级属性以后就是浅拷贝。
var source1 = "abc";
var source2 = true;
var source3 = 10;
 
var result = Object.assign({}, source1, null, source2, undefined, source3); 
// 原始类型会被包装,null 和 undefined 会被忽略。
// 注意,只有字符串的包装对象才可能有自身可枚举属性。
console.log(result); // {0: 'a', 1: 'b', 2: 'c'}

var object1 = {
		a: 1,
		b: {
			c: 2,
			d: 3
		}
	};
var object2 = Object.assign({}, object1);
	object2.a = 10;
	object2.b.c = 20;
	console.log(object1); // { a: 1, b: { c: 20, d: 3 } }
	console.log(object2) //{ a: 10, b: { c: 20, d: 3} }

拓展:可枚举属性 Object.defineProperty(obj,prop,descriptior)

  • obj:要定义属性的对象。
  • prop:一个字符串或 Symbol指定了要定义或修改的属性键。
  • descriptor 要定义或修改的属性的描述符。

descriptor:

  • writable: 是否可重写
  • value: 当前值
  • get: 读取时内部调用的函数
  • set: 写入时内部调用的函数
  • enumerable: 是否可以遍历
  • configurable: 是否可再次修改配置项(为false、不可更改和删除,特殊:writable为true可以改成false)

具体看MDN