从 ES5 - ES11 常见的对象方法的汇总

3 阅读2分钟

从 ES5 - ES11 常见的对象方法的汇总

 

ES5:新增的 Object 方法****

Object.create()****

用于创建一个新的对象,使用指定的原型对象和可选的属性。

const obj = Object.create(proto, propertiesObject);

Object.defineProperty()****

用于在对象上定义新属性或修改现有属性。

 

Object.defineProperty(obj, prop, descriptor);

Object.defineProperties()****

用于在对象上定义多个新属性或修改现有属性。

Object.defineProperties(obj, descriptors);

Object.freeze()****

冻结对象,使得对象的属性不可修改(即使是嵌套的属性也无法改变)。

Object.freeze(obj);

Object.seal()****

封闭对象,禁止添加新属性,同时现有属性不能被删除,但可以修改其值。

Object.seal(obj);

Object.isFrozen()****

判断对象是否被冻结。

Object.isFrozen(obj);

Object.isSealed()****

判断对象是否被封闭。

Object.isSealed(obj);

Object.getOwnPropertyDescriptor()****

返回指定对象自身的属性的属性描述符。

Object.getOwnPropertyDescriptor(obj, prop);

Object.getOwnPropertyNames()****

返回指定对象的所有自身属性名(包括不可枚举属性)。

Object.getOwnPropertyNames(obj);

Object.getOwnPropertySymbols()****

返回指定对象的所有自身符号属性名。

Object.getOwnPropertySymbols(obj);

Object.is()****

判断两个值是否严格相等(考虑 NaN 和 +0/-0 的特殊情况)。

Object.is(value1, value2);

Object.keys()****

返回对象自身可枚举属性的名称。

Object.keys(obj);

Object.preventExtensions()****

禁止扩展对象,即不能添加新的属性。

Object.preventExtensions(obj);

Object.getPrototypeOf()****

 

返回指定对象的原型(内部[[Prototype]]属性)。

Object.getPrototypeOf(obj);

 

ES6:新增的 Object 方法****

Object.assign()****

用于将一个或多个源对象的所有可枚举属性拷贝到目标对象。

Object.assign(target, ...sources);

Object.isExtensible()****

判断对象是否可以扩展(即是否允许添加新属性)。

Object.isExtensible(obj);

Object.setPrototypeOf()****

设置指定对象的原型。

Object.setPrototypeOf(obj, prototype);

Object.values()****

返回对象所有可枚举属性的值。

Object.values(obj);

Object.entries()****

返回对象所有可枚举属性的键值对数组。

Object.entries(obj);

ES7(ECMAScript 2016):没有新增 Object 方法。****

ES8(ECMAScript 2017):新增的 Object 方法****

Object.getOwnPropertyDescriptors()****

返回对象所有自身属性的属性描述符。

Object.getOwnPropertyDescriptors(obj);

Object.values()****

(重复列出)返回对象所有可枚举属性的值。

Object.entries()****

(重复列出)返回对象所有可枚举属性的键值对数组。

ES9(ECMAScript 2018):没有新增 Object 方法。****

ES10(ECMAScript 2019):新增的 Object 方法****

Object.fromEntries()****

将一个键值对的数组转换为对象。

Object.fromEntries(iterable);

例如:

const entries = [['foo', 'bar'], ['baz', 42]];

const obj = Object.fromEntries(entries);

console.log(obj);  // { foo: 'bar', baz: 42 }

ES11(ECMAScript 2020):没有新增 Object 方法。****

总结

ES5 引入了许多有助于更精确控制对象属性的工具(如 defineProperty 和 freeze)。

ES6 则引入了如 Object.assign 和 Object.setPrototypeOf 等方法,增强了对象的操作能力。

ES7 到 ES11 没有新增过多对象操作方法,但 ES10 引入了 Object.fromEntries(),使得从键值对数组生成对象变得非常便捷。