从 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(),使得从键值对数组生成对象变得非常便捷。