写这篇文章主要是用来整理一下常用的Object API,加深记忆以及方便后期自己查阅
构造函数
Object()构造函数
Object
构造函数将给定的值包装为一个新对象
- 如果给定的值是
null
或undefined
,它会创建并返回一个空对象 - 否则,将返回一个和给定的值相对应的类型的对象
- 如果给定值是一个已经存在的对象,则会返回这个已经存在的值(相同地址)
静态方法
Object.assign()
通过复制一个或多个对象来创建一个新的对象。
Object.assign()
方法用于将所有可枚举属性的值从一个
let a = {b: 1, c: 2}
let d = {e: 3, f: 4, b: 5}
let g = Object.assign(a, d)
console.log(a) // {b: 5, c: 2, e: 3, f: 4}
console.log(g) // {b: 5, c: 2, e: 3, f: 4}
console.log(a === g) // true
或多个源对象分配到目标对象。它将返回目标对象。
语法
Object.assign(target, ...sources)
Object.create()
Object.create()
方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__
。
语法
Object.create(proto, [propertiesObject])
参数
proto
新创建对象的原型对象
propertiesObject
可选,需要传入一个对象,如果该参数被指定且不为undefined,该传入对象的自有可枚举属性(即其自身定义的属性,而不是其原型链上的枚举属性)将为新创建的对象添加指定的属性值和对应的属性描述符。
使用
let a = {
b: () => {
console.log(1)
},
c: function (){
console.log(2)
}
}
let d = Object.create(a)
console.log(d) // {}
console.log(d.__proto__) // {b: () => { console.log(1) }, c: ƒ ()}
propertiesObject参数的使用
let e = {f: 1, g: 2}
d = Object.create(a, e)
// VM982:1 Uncaught TypeError: Property description must be an object: 1
e = {f: {value: 1}, g: {value: 2}}
d = Object.create(a, e)
console.log(d) // {f: {value: 1}, g: {value: 2}}
console.log(d.__proto__) // b: () => { console.log(1) }, c: ƒ ()}
Object.defineProperty()
Object.defineProperty()
方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回对象。
语法
Object.defineProperty(obj, prop, descriptor)
参数
obj
要定义属性的对象
prop
要定义或修改的属性的名称或Symbol
descriptor
要定义或修改的属性描述
返回值
被传递给函数的对象
使用
let a = {b: 1, c: 2}
let d = Object.defineProperty(a, 'e', 1) // Uncaught TypeError: Property description must be an object: 1
let d = Object.defineProperty(a, 'e', {value: 1})
d = Object.defineProperty(a, 'b', {value: 3})
console.log(a) // {b: 3, c: 2, e: 1} e不可修改
console.log(b) // {b: 3, c: 2, e: 1} e不可修改
console.log(a === d) // true
Object.defineProperties()
Object.defineProperties()
方法直接在一个对象上定义新的属性或修改现有属性,并返回该对象
Object.defineProperties
本质上定义了obj
对象上props
的可枚举属性相对应的所有属性。
语法
Object.defineProperties(obj, props)
使用
var obj = {};
Object.defineProperties(obj, {
'property1': {
value: true,
writable: true
},
'property2': {
value: 'Hello',
writable: false
}
});
Object.freeze()
Object.freeze()
方法可以冻结一个对象。一个被冻结的对象再也不能被修改。冻结了一个对象则不能向这个对象添加新属性,不能删除已有属性,不能修改该对象已有属性的可枚举性,可配置性,可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze()
返回和传入的参数相同的对象。
let a = {b: 1, c: 2}
Object.freeze(a)
a.b = 3
a.d = 4
console.log(a) // {b: 1, c: 2}
Object.getOwnPropertyDescriptor
返回对象指定的属性配置
let a = {b: 1, c: 2}
let d = Object.getOwnPropertyDescriptor(a, 'b')
console.log(d) // {value: 1, writable: true, enumerable: true, configurable: true}
Object.getPropertyOf
返回指定对象的原型对象,即内部[[Prototype]]属性的值
Object.is
判断两个值是否为同一个值
Object.keys
返回一个包含所有给定对象自身可枚举属性名称的数组
Object.setPrototypeof
设置对象的原型
Object.value
返回给定对象自身可枚举值的数组
实例方法
Object.prototype.hasOwnProperty
返回一个布尔值,用于表示一个对象自身是否包含指定的属性,该方法并不会查找原型链上继承来的属性
Object.prototype.isPrototypeOf
返回一个布尔值,用于表示该方法所调用的对象是否在指定对象的原型链中