Object.entries: 返回一个对象自身可枚举属性的键值对,顺序与for-in循环时的顺序一致

  1. const obj = { foo: 'bar', baz: 42 }
  2. Object.entries(obj) // [["foo", "bar"],["baz", 42]]
  3. 复制代码

Object.freeze: 冻结一个对象(只有一层),不能修改任何信息,包括新增属性、删除属性、修改属性值

Object.isFrozen: 判断一个对象是否已经被冻结

  1. const obj = {
  2. a: 1,
  3. b: {
  4. c: 2
  5. }
  6. }
  7. console.log(obj.a) // 1
  8. console.log(obj.b.c) // 2
  9. obj.a = 3
  10. obj.b.c = 4
  11. console.log(obj.a) // 3
  12. console.log(obj.b.c) // 4
  13. Object.isFrozen(obj) // false
  14. Object.freeze(obj)
  15. Object.isFrozen(obj) // true
  16. obj.a = 5
  17. obj.b.c = 6
  18. console.log(obj.a) // 3
  19. console.log(obj.b.c) // 6
  20. 复制代码

Object.keys: 获取一个对象中所有的key值(不包括不可枚举属性和Symbol属性)

Object.values: 获取一个对象中所有的value值(不包括不可枚举属性和Symbol属性)

  1. const obj = {}
  2. Object.defineProperty(obj, 'a', {Enumerable: false, value: 1})
  3. obj[Symbol()] = 2
  4. obj['b'] = 3
  5. console.log(Object.keys(obj)) // ['b']
  6. console.log(Object.values(obj)) // ['3']
  7. console.log(Object.getOwnPropertyNames(obj)) // ['a', 'b']
  8. console.log(Object.getOwnPropertySymbols(obj)) // [Symbol()]
  9. 复制代码

Object.getOwnPropertyNames: 获取一个对象所有属性的key值(包括不可枚举属性,不包括Symbol属性)

  1. const obj = {
  2. foo: 'bar',
  3. baz: 43
  4. }
  5. Object.getOwnPropertyNames(obj) // ['foo', 'baz']
  6. 复制代码

Object.getOwnPropertySymbols: 获取一个对象所有Symbol属性

  1. const obj = {}
  2. obj[Symbol('a')] = 'localSymbol'
  3. obj[Symbol.for('b')] = 'globalSymbol'
  4. Object.getOwnPropertySymbols(obj) // [Symbol(a), Symbol(b)]
  5. 复制代码

拓展:Symbol是为了保证对象属性的一致性

  1. const sy = Symbol('a')
  2. const obj = {}
  3. obj[Symbol('a')] = 3 // {Symbol(a): 3}
  4. obj[sy] = 4 // {Symbol(a): 3, Symbol(a): 4}
  5. console.log(obj[Symbol('a')]) // undefined
  6. console.log(obj[sy]) // 4
  7. 复制代码

Object.preventExtensions: 使一个对象不再具有拓展性(不能添加新属性)

Object.isExtensible: 判断一个对象是否具有拓展性

  1. const obj = {v1: 1} // {v1:1}
  2. obj.v2 = 2 // {v1:1, v2:2}
  3. Object.preventExtensions(obj)
  4. obj.v3 = 3 // {v1:1, v2:2}
  5. obj.v2 = 3 // {v1:1, v2:3}
  6. Object.isExtensible(obj) // false