object.assign() 主要用于对象合并,将源对象中的属性复制到目标对象中,他将返回目标对象.
Object.assign(target, ...sources)
- 如果有同名属性的话,后面的属性值会覆盖前面的属性值
- 原始类型会被包装为对象
- 浅拷贝,当对象中只有一级属性,没有二级属性的时候,此方法为深拷贝,但是对象中有对象的时候,此方法,在二级属性以后就是浅拷贝。
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