常见的 JavaScript 对象的方法速览:
-
Object.keys(obj):
- 返回一个数组,包含给定对象自身可枚举属性的名称。
-
Object.values(obj):
- 返回一个数组,包含给定对象自身可枚举属性的值。
-
Object.entries(obj):
- 返回一个数组,包含给定对象自身可枚举属性的键值对数组。
-
Object.hasOwnProperty(prop):
- 判断对象是否具有指定属性,不包括原型链上的属性。
-
Object.assign(target, ...sources):
- 将一个或多个源对象的可枚举属性复制到目标对象,并返回目标对象。
-
Object.freeze(obj):
- 冻结对象,使其属性不可修改、删除或添加。
-
Object.seal(obj):
- 封闭对象,阻止添加或删除属性,但允许修改属性值。
-
Object.getOwnPropertyNames(obj):
- 返回一个数组,包含对象自身的所有属性名称,包括不可枚举属性。
-
Object.create(proto[, propertiesObject]):
- 创建一个新对象,使用指定的原型对象和属性值。
-
Object.getPrototypeOf(obj):
- 返回指定对象的原型(即
__proto__属性的值)。
- 返回指定对象的原型(即
-
Object.setPrototypeOf(obj, proto):
- 设置指定对象的原型为指定的原型对象。
-
Object.entries(obj):
- 返回一个给定对象自身可枚举属性的
[key, value]数组。
- 返回一个给定对象自身可枚举属性的
-
Object.getOwnPropertyDescriptors(obj):
- 返回一个对象,包含指定对象所有自身属性的描述符。
-
Object.fromEntries(iterable):
- 将一个键值对的数组转换为一个对象。
-
Object.toString():
- 返回对象的字符串表示形式。
示例
-
Object.keys(obj):
- 场景:需要获取对象的所有属性名称。
- 示例:
const obj = { name: 'John', age: 30, city: 'New York' }; const keys = Object.keys(obj); console.log(keys); // 输出: ["name", "age", "city"] -
Object.values(obj):
- 场景:需要获取对象的所有属性值。
- 示例:
const obj = { name: 'John', age: 30, city: 'New York' }; const values = Object.values(obj); console.log(values); // 输出: ["John", 30, "New York"] -
Object.entries(obj):
- 场景:需要遍历对象的所有键值对。
- 示例:
const obj = { name: 'John', age: 30, city: 'New York' }; const entries = Object.entries(obj); console.log(entries); // 输出: [["name", "John"], ["age", 30], ["city", "New York"]] -
Object.hasOwnProperty(prop):
- 场景:需要检查对象是否具有某个属性。
- 示例:
const obj = { name: 'John', age: 30 }; console.log(obj.hasOwnProperty('name')); // 输出: true console.log(obj.hasOwnProperty('city')); // 输出: false -
Object.assign(target, ...sources):
- 场景:需要将多个对象的属性合并到一个目标对象中。
- 示例:
const target = { a: 1, b: 2 }; const source = { b: 3, c: 4 }; const result = Object.assign({}, target, source); console.log(result); // 输出: { a: 1, b: 3, c: 4 } -
Object.keys(obj):
- 场景:需要获取对象的所有属性名称。
- 示例:
const obj = { name: 'John', age: 30, city: 'New York' }; const keys = Object.keys(obj); console.log(keys); // 输出: ["name", "age", "city"] -
Object.values(obj):
- 场景:需要获取对象的所有属性值。
- 示例:
const obj = { name: 'John', age: 30, city: 'New York' }; const values = Object.values(obj); console.log(values); // 输出: ["John", 30, "New York"] -
Object.entries(obj):
- 场景:需要遍历对象的所有键值对。
- 示例:
const obj = { name: 'John', age: 30, city: 'New York' }; const entries = Object.entries(obj); console.log(entries); // 输出: [["name", "John"], ["age", 30], ["city", "New York"]] -
Object.hasOwnProperty(prop):
- 场景:需要检查对象是否具有某个属性。
- 示例:
const obj = { name: 'John', age: 30 }; console.log(obj.hasOwnProperty('name')); // 输出: true console.log(obj.hasOwnProperty('city')); // 输出: false -
Object.assign(target, ...sources):
- 场景:需要将多个对象的属性合并到一个目标对象中。
- 示例:
const target = { a: 1, b: 2 }; const source = { b: 3, c: 4 }; const result = Object.assign({}, target, source); console.log(result); // 输出: { a: 1, b: 3, c: 4 }继续:
-
Object.freeze(obj):
- 场景:需要防止对象的属性被修改。
- 示例:
const obj = { name: 'John', age: 30 }; Object.freeze(obj); obj.age = 40; // 无效操作,不会改变对象的属性 console.log(obj); // 输出: { name: 'John', age: 30 } -
Object.seal(obj):
- 场景:需要防止对象的属性被删除或添加,但允许修改属性值。
- 示例:
const obj = { name: 'John', age: 30 }; Object.seal(obj); delete obj.age; // 无效操作,无法删除属性 obj.city = 'New York'; // 无效操作,无法添加属性 obj.age = 40; // 有效操作,可以修改属性值 console.log(obj); // 输出: { name: 'John', age: 40 } -
Object.getOwnPropertyNames(obj):
- 场景:需要获取对象的所有属性名称,包括不可枚举属性。
- 示例:
const obj = Object.create({}, { name: { value: 'John', enumerable: false }, age: { value: 30, enumerable: true } }); const names = Object.getOwnPropertyNames(obj); console.log(names); // 输出: ["name", "age"] -
Object.create(proto[, propertiesObject]):
- 场景:需要创建一个新对象,并指定其原型对象和属性值。
- 示例:
const proto = { greet() { console.log('Hello!'); } }; const obj = Object.create(proto, { name: { value: 'John' } }); obj.greet(); // 输出: Hello! console.log(obj.name); // 输出: John -
Object.getPrototypeOf(obj):
- 场景:需要获取对象的原型对象。
- 示例:
const proto = { greet() { console.log('Hello!'); } }; const obj = Object.create(proto); console.log(Object.getPrototypeOf(obj) === proto); // 输出: true