Object.assign()
常见用途
添加属性
添加方法
设置默认参数
数组替换
Object.assign([1, 2, 3], [4, 5])<br>// [4, 5, 3]
方法特点
方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。
方法的第一个参数是目标对象,后面的参数都是源对象。
目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。
方法实行的是浅拷贝,而不是深拷贝
注意事项
浅拷贝
方法实行的是浅拷贝,而不是深拷贝,源对象某个属性的值是对象,拷贝得到的是对象的引用。
同名属性的替换
对于嵌套的对象,遇到同名属性,Object.assign会进行属性替换
数组的处理
可以用来处理数组,但是会把数组视为对象。
Object.assign([1, 2, 3], [4, 5])<br>// [4, 5, 3]
取值函数的处理
只能进行值的复制,如果要复制的值是一个取值函数,那么将求值后再复制。
Object.getOwnPropertyDescriptors()
返回指定对象所有自身属性(非继承属性)的描述对象。
原型相关
__proto__属性
用来读取或设置当前对象的prototype对象
从兼容性的角度,都不要使用这个属性
Object.setPrototypeOf()
方法的作用与__proto__相同,用来设置一个对象的prototype对象,返回参数对象本身
Object.setPrototypeOf(object, prototype)
Object.getPrototypeOf()
用于读取一个对象的原型对象
Object.getPrototypeOf(1)<br>// Number {[[PrimitiveValue]]: 0}
参数是undefined或null,会报错
对象遍历
Object.keys()
返回数组,结果是参数对象自身的(不含继承的)所有可遍历属性的key名。
var obj = { foo: 'bar', baz: 42 };<br>Object.keys(obj)<br>// ["foo", "baz"]
Object.values()
方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值。
const obj = { foo: 'bar', baz: 42 };<br>Object.values(obj)<br>// ["bar", 42]
Object.entries()
方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对数组。
const obj = { foo: 'bar', baz: 42 };<br>Object.entries(obj)<br>// [ ["foo", "bar"], ["baz", 42] ]
Object.fromEntries()
Object.fromEntries()方法是Object.entries()的逆操作,用于将一个键值对数组转为对象。
Object.fromEntries([<br>['foo', 'bar'],<br>['baz', 42]<br>])<br>// { foo: "bar", baz: 42 }