https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object

Object.create(null)

原型链继承没有父级,创建出来的对象会纯净一些,toString都没有

Object的属性

Object.prototype
Object.prototype.constructor 指向对象本身
Object.proto 对象的原型链父级,指向superClassObj.prototype
Object.constructor 返回一个constructor对象
Object.constructor.prototype === Object.proto

静态方法

Object.assign(target, …source);

target 目标对象,…source 源对象,可以是多个
返回目标对象
Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。

  1. const obj = { a: 1 };
  2. const copy = Object.assign({}, obj);
  3. console.log(copy); // { a: 1 }

针对深拷贝,需要使用其他办法,因为 Object.assign()拷贝的是属性值。假如源对象的属性值是一个对象的引用,那么它也只指向那个引用。

Object.create(PrototypeObj[, propertiesObject])

PrototypeObj 原型对象,使用那个原型进行创建对象,propertiesObject是一个对象,表示要添加到新对象的可枚举属性。
返回一个对象
创建一个对象

Object.defineProperties()(target, props)

target 目标对象,props 要定义的属性,以及属性描述符

  1. props
  2. 要定义其可枚举属性或修改的属性描述符的对象。对象中存在的属性描述符主要有两种:
  3. 数据描述符和访问器描述符。描述符具有以下键:
  4. configurable
  5. true
  6. 当且仅当该属性描述符的类型可以被改变并且该属性可以从对应对象中删除。
  7. 默认为 false
  8. enumerable
  9. true 当且仅当在枚举相应对象上的属性时该属性显现。
  10. 默认为 false
  11. value
  12. 与属性关联的值。可以是任何有效的JavaScript值(数字,对象,函数等)。
  13. 默认为 undefined.
  14. writable
  15. true当且仅当与该属性相关联的值可以用赋值运算符(assignment operator)改变时。
  16. 默认为 false
  17. get
  18. 作为该属性的 getter 函数,如果没有 getter 则为undefined。函数返回值将被用作属性的值。
  19. 默认为 undefined
  20. set
  21. 作为属性的 setter 函数,如果没有 setter 则为undefined。函数将仅接受参数赋值给该属性的新值。
  22. 默认为 undefined

返回目标对象
方法会直接在目标对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。

  1. var obj = {};
  2. Object.defineProperties(obj, {
  3. 'property1': {
  4. value: true,
  5. writable: true
  6. },
  7. 'property2': {
  8. value: 'Hello',
  9. writable: false
  10. }
  11. // etc. etc.
  12. });

Object.defineProperty(target, prop, descriptor)

target 目标对象, prop 属性 ,descriptor 属性描述符
返回目标对象
给目标对象定义一个属性

Object.entries(target)

target 目标对象
返回对象的可枚举键值对数组,与Object.fromEntries是相反的操作

  1. const anObj = { 100: 'a', 2: 'b', 7: 'c' };
  2. console.log(Object.entries(anObj)); // [ ['2', 'b'], ['7', 'c'], ['100', 'a'] ]

Object.fromEntries([[key,value],[key,value]…]);

参数是键值对数组
返回一个对象
将键值对数组转换为一个对象,与Object.entries是相反的操作

  1. const map = new Map([ ['foo', 'bar'], ['baz', 42] ]);
  2. const obj = Object.fromEntries(map);
  3. console.log(obj); // { foo: "bar", baz: 42 }

Object.keys(target)

target目标对象
返回目标对象的所有可枚举属性的key组成的数组;
返回目标对象的所有可枚举属性的key名称;

Object.values(target)

target目标对象
返回目标对象的所有可枚举属性的value值组成的数组;
返回目标对象的所有可枚举属性的value值组成的数组;

Object.getOwnPropertyNames(target)

target目标对象
返回目标对象的可枚举属性与不可枚举属性的属性名组成的数组。
返回目标对象的可枚举属性与不可枚举属性的属性名组成的数组。

Object.getOwnPropertySymbols(target)

target 目标对象
返回一个symbol元素组成的数组。
返回目标对象的所有以symbol作为key的symbolKey组成的数组。

Object.getOwnPropertyDescriptors(target)

target 目标对象
返回目标对象的所有属性的属性描述符
返回目标对象的所有属性的属性描述符

Object.getOwnPropertyDescriptor(target, propKey)

target 目标对象,propKey 属性名称
返回目标对象的对应属性的属性描述符
返回目标对象的对应属性的属性描述符

Object.getPrototypeOf(target)

target 目标对象
返回目标对象的原型,或者null,返回null表示上面没有原型了,原型链结束。
返回目标对象的原型,或者null,返回null表示上面没有原型了,原型链结束。

Object.setPrototypeOf(target, newPrototype)

target 目标对象, newPrototype 新原型
返回目标对象
改变目标对象的原型,不建议使用的语法,速度慢,请用Object.create

Object.is(value1, value2)

value1 值1 ,value2 值2
返回boolean
判断两个值是否相等

Object.freeze(target)

target 目标对象
返回目标对象
冻结一个对象,冻结的对象不允许被修改

Object.preventExtensions(target)

target 目标对象
返回目标对象
将目标对象变为不可扩展,也就是永远不能再添加新的属性。

Object.seal(target)

target 目标对象
返回目标对象
将目标对象变为密封对象,阻止添加新属性并将所有现有属性标记为不可配置。当前属性的值只要可写就可以改变。

Object.isExtensible(target)

target 目标对象
返回boolean
判断对象是否可以被扩展

Object.isFrozen(target)

target 目标对象
返回boolean
判断对象是否被冻结

Object.isSealed(target)

target 目标对象
返回boolean
判断对象是否被密封

原型方法

Object.prototype.hasOwnProperty(propKey)

propKey 属性名称,可以是symbol
返回一个boolean
检查对象是否包含指定属性

  1. var o = { a : 1};
  2. o.hasOwnProperty('a'); // true

Object.prototype.isPrototypeOf(target);

target 目标对象
返回一个boolean
检查目标对象的原型链,是否包含了当前对象,只能用 (构造函数).prototype.isPrototypeOf

  1. function A(Name) {
  2. this.Name = Name;
  3. }
  4. var a = new A('小张');
  5. A.prototype.isPrototypeOf(a); // true

Object.prototype.propertyIsEnumerable(propKey)

propKey 属性名称 可以用symbol
返回boolean
检查对象属性是否是可枚举属性,是返回true

Object.prototype.toString();

Object.prototype.toSource();

Object.prototype.toLocaleString();

Object.prototype.valueOf();