Object

Creating an Object

literals

  • 描述:创建一个新对象,其原型为 Object.prototype
let empty = {}
let point = { x: 0, 'y': 0 }

new

  • 描述:创建一个新对象,其原型为 fn.prototype
  • 语法new fn()
let empty = new Object() // 等价于 {}
let empty = new Array()  // 等价于 []

create()

  • 描述:创建一个新对象,其原型为 proto
  • 语法Object.create(proto, props?)
Object.create({ a: 1 }) // 原型为 { a: 1 }
Object.create(Object.prototype) // 等价于 {}
Object.create(null) // 无原型对象

Accessing an Object

subscript

  • 描述:访问对象属性
let obj = { a: 1 }
obj.a // 1
obj['a'] // 1

Modifying an Object

subscript

  • 描述:修改对象属性
let obj = { a: 1 }
obj.a = 2
obj['a'] = 2

delete

let obj = { a: 1 }
delete obj.a // true

Checking Object Props

hasOwn()

  • 描述:检查对象的自有属性是否存在
  • 语法Object.hasOwn(obj, prop)
let obj = Object.create({ a: 1 })
obj.b = 2
Object.hasOwn(obj, 'a') // false, 继承属性
Object.hasOwn(obj, 'b') // true, 自有属性

in

  • 描述:检查对象的自有属性继承属性是否存在
let obj = Object.create({ a: 1 })
obj.b = 2
'a' in obj // true, 继承属性
'b' in obj // true, 自有属性

Enumerating an Object

keys()

  • 描述:返回一个数组,包含了对象自有可枚举属性的键
  • 语法Object.keys(obj)
Object.keys([1, 2, 3])      // ['0', '1', '2']
Object.keys({ a: 1, b: 2 }) // ['a', 'b'] 

values()

  • 描述:返回一个数组,包含了对象自有可枚举属性的值
  • 语法Object.values(obj)
Object.values([1, 2, 3])      // [1, 2, 3]
Object.values({ a: 1, b: 2 }) // [1, 2] 

entries()

  • 描述:返回一个数组,包含了对象自有可枚举属性的键值对
  • 语法Object.entries(obj)
Object.entries([1, 2, 3])      // [['0', 1], ['1', 2], ['2', 3]]
Object.entries({ a: 1, b: 2 }) // [['a', 1], ['b', 2]] 

Copying an Object

assign()

  • 描述:将 source自有可枚举属性复制到 target,并返回修改后的 target
  • 语法Object.assign(target, ...sources)
// 拷贝对象
Object.assign({}, { a: 1 }) // { a: 1 }
 
// 覆盖属性
Object.assign({ a: 1 }, { a: 0, b: 0 }) // { a: 0, b: 0 }

spread operator

  • 描述:将 source自有可枚举属性复制到 target,并返回修改后的 target
// 后面属性覆盖前面属性
let source = { a: 0, b: 0 }
let target = { a: 1, ...source } // { a: 0, b: 0 }
let target = { ...source, a: 1 } // { a: 1, b: 0 }

Prototype Methods

getPrototypeOf()

  • 描述:返回对象的原型
  • 语法Object.getPrototypeOf(obj)
let obj = Object.create({ a: 1 })
Object.getPrototypeOf(obj) // { a: 1 }

setPrototypeOf()

  • 描述:修改对象的原型
  • 语法Object.setPrototypeOf(obj, proto)
let obj = Object.create({ a: 1 })
Object.setPrototypeOf(obj, { b: 2 })
Object.getPrototypeOf(obj) // { b: 2 }

constructor

  • 描述:指向构造函数
  • 语法obj.constructor
function Animal() {}
let obj = new Animal()
obj.constructor // Animal