一七四、JavaScript里Object的常用方法及其示例
在 JavaScript 中,Object
是一个基本的内建对象,提供了多种用于操作对象的静态方法。以下是 Object
对象的主要方法以及它们的使用示例:
1. Object.assign(target, ...sources)
将所有源对象(sources
)的可枚举属性复制到目标对象(target
)中。返回目标对象。
示例:
const target = { a: 1 };
const source = { b: 2, c: 3 };
const result = Object.assign(target, source);
console.log(result); // 输出: { a: 1, b: 2, c: 3 }
2. Object.create(proto, propertiesObject)
使用指定的原型对象(proto
)和可选的属性描述符(propertiesObject
)创建一个新的对象。
示例:
const proto = { greet: function() { console.log('Hello!'); } };
const obj = Object.create(proto);
obj.greet(); // 输出: Hello!
3. Object.defineProperty(obj, prop, descriptor)
在对象上定义一个新的属性,或修改现有属性。descriptor
参数描述了该属性的配置。
示例:
const obj = {};
Object.defineProperty(obj, 'name', {
value: 'John',
writable: true,
enumerable: true,
configurable: true
});
console.log(obj.name); // 输出: John
4. Object.defineProperties(obj, descriptors)
定义或修改对象的多个属性。
示例:
const obj = {};
Object.defineProperties(obj, {
'name': {
value: 'John',
writable: true
},
'age': {
value: 30,
writable: true
}
});
console.log(obj); // 输出: { name: 'John', age: 30 }
5. Object.entries(obj)
返回一个给定对象自身可枚举属性的键值对数组。
示例:
const obj = { a: 1, b: 2 };
const entries = Object.entries(obj);
console.log(entries); // 输出: [['a', 1], ['b', 2]]
6. Object.freeze(obj)
冻结对象,阻止新增属性,修改现有属性和删除现有属性。
示例:
const obj = { a: 1 };
Object.freeze(obj);
obj.a = 2; // 不会改变对象
console.log(obj.a); // 输出: 1
7. Object.fromEntries(iterable)
将一个键值对的可迭代对象(如数组)转换为一个对象。
示例:
const entries = [['a', 1], ['b', 2]];
const obj = Object.fromEntries(entries);
console.log(obj); // 输出: { a: 1, b: 2 }
8. Object.getOwnPropertyDescriptor(obj, prop)
返回对象的指定属性的描述符。
示例:
const obj = { a: 1 };
const descriptor = Object.getOwnPropertyDescriptor(obj, 'a');
console.log(descriptor); // 输出: { value: 1, writable: true, enumerable: true, configurable: true }
9. Object.getOwnPropertyDescriptors(obj)
返回对象所有属性的描述符。
示例:
const obj = { a: 1, b: 2 };
const descriptors = Object.getOwnPropertyDescriptors(obj);
console.log(descriptors);
// 输出: { a: { value: 1, writable: true, enumerable: true, configurable: true }, b: { value: 2, writable: true, enumerable: true, configurable: true } }
10. Object.getOwnPropertyNames(obj)
返回一个数组,包含对象自身的所有属性名称(包括不可枚举属性)。
示例:
const obj = { a: 1, b: 2 };
const props = Object.getOwnPropertyNames(obj);
console.log(props); // 输出: ['a', 'b']
11. Object.getPrototypeOf(obj)
返回对象的原型([[Prototype]]
)。
示例:
const obj = { a: 1 };
const prototype = Object.getPrototypeOf(obj);
console.log(prototype); // 输出: { constructor: f }
12. Object.is(value1, value2)
比较两个值是否严格相等,区别于 ===
运算符,它能够区分 +0
和 -0
,以及 NaN
和 NaN
。
示例:
console.log(Object.is(0, -0)); // 输出: false
console.log(Object.is(NaN, NaN)); // 输出: true
13. Object.isExtensible(obj)
判断一个对象是否可扩展,即是否可以添加新属性。
示例:
const obj = { a: 1 };
console.log(Object.isExtensible(obj)); // 输出: true
Object.preventExtensions(obj);
console.log(Object.isExtensible(obj)); // 输出: false
14. Object.isFrozen(obj)
检查对象是否被冻结。
示例:
const obj = { a: 1 };
console.log(Object.isFrozen(obj)); // 输出: false
Object.freeze(obj);
console.log(Object.isFrozen(obj)); // 输出: true
15. Object.isSealed(obj)
检查对象是否被密封(即不可新增或删除属性)。
示例:
const obj = { a: 1 };
console.log(Object.isSealed(obj)); // 输出: false
Object.seal(obj);
console.log(Object.isSealed(obj)); // 输出: true
16. Object.keys(obj)
返回对象自身的所有可枚举属性的键。
示例:
const obj = { a: 1, b: 2 };
const keys = Object.keys(obj);
console.log(keys); // 输出: ['a', 'b']
17. Object.seal(obj)
密封对象,禁止新增或删除属性,但可以修改现有属性。
示例:
const obj = { a: 1 };
Object.seal(obj);
obj.a = 2; // 可以修改现有属性
delete obj.a; // 不能删除属性
console.log(obj); // 输出: { a: 2 }
18. Object.setPrototypeOf(obj, prototype)
设置对象的原型([[Prototype]]
)。
示例:
const obj = { a: 1 };
const prototype = { greet: function() { console.log('Hello!'); } };
Object.setPrototypeOf(obj, prototype);
obj.greet(); // 输出: Hello!
总结
Object
对象提供了许多用于操作对象的静态方法,涵盖了属性定义、对象冻结与密封、对象属性描述符、对象继承关系等多个方面,适用于在实际开发中处理对象时提高代码效率和可维护性。