1.Object.assign(target,source1,source2,...)
方法主要用于对象的合并,将源对象source的所有可枚举属性合并到目标对象target上,此方法只拷贝源对象的自身属性,不拷贝继承的属性。(从后向前覆盖)
Object.assign方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。同名属性会替换。
Object.assign只能进行值的复制,如果要复制的值是一个取值函数,那么将求值后再复制。
Object.assign可以用来处理数组,但是会把数组视为对象。
2.Object.create(prototype,[propertiesObject])
使用指定的原型对象及其属性去创建一个新的对象
3.Object.defineProperties(obj,props)
通过多个描述符一次性定义多个属性,接收两个参数:要为之添加或修改属性的对象和另一个描述符对象,其属性与要添加过修改的属性一 一对应。
const obj = {} Object.defineProperties(obj, { a_: { value: 1, writable: true }, a: { get() { return a_ }, set(newValue) { console.log('set劫持') this.a_ = newValue } } }) obj.a = 2
4.Object.defineProperty(obj,prop,descriptor)(详细)
在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。
5.Object.keys(obj)
返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for...in 循环遍历该对象时返回的顺序一致 (两者的主要区别是 一个 for-in 循环还会枚举其原型链上的属性)。
6.Object.values()
方法返回一个给定对象自己的所有可枚举属性值的数组,值的顺序与使用for...in循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。
Object.values会过滤属性名为 Symbol 值的属性。
7.Object.entries()
返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for...in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环也枚举原型链中的属性)。
8.hasOwnProperty()
判断对象自身属性中是否具有指定的属性。
9.Object.getOwnPropertyNames()
返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组。
10.isPrototypeOf()
判断一个对象是否存在于另一个对象的原型链上。
11.Object.setPrototypeOf(obj,prototype)
设置对象的原型对象
12.Object.is()
判断两个值是否相同。
如果下列任何一项成立,则两个值相同:
13.Object.freeze()
冻结一个对象,冻结指的是不能向这个对象添加新的属性,不能修改其已有属性的值,不能删除已有属性,以及不能修改该对象已有属性的可枚举性、可配置性、可写性。也就是说,这个对象永远是不可变的。该方法返回被冻结的对象。
14.Objec t.isFrozen()
判断一个对象是否被冻结 .
15.Object.preventExtensions()
对象不能再添加新的属性。可修改,删除现有属性,不能添加新属性。
16.Object.getOwnPropertyDescriptor()
取得指定属性的属性描述符,返回一个对象
两个参数:所在的对象和要取得描述符的属性名
17.Object.getOwnPropertyDescriptors()
这个方法实际会在每个自有属性上调用Object.defineProperties()并在一个新对象中返回它们。
一个参数:对象