在JavaScript中,Object是所有对象的基类,它具有许多常用方法。以下是其中一些常见的方法以及它们的示例用法:
- Object.keys(obj):返回一个由给定对象自身可枚举属性组成的数组
- Object.values(obj):返回一个给定对象所有可枚举属性值的数组
- Object.entries(obj):返回一个给定对象自身可枚举属性的键值对数组
- Object.assign(target, ...sources):将源对象的所有可枚举属性复制到目标对象中,并返回目标对象
- Object.freeze(obj):冻结一个对象,使其不能被修改、添加或删除属性
- Object.seal(obj):封闭一个对象,使其不能添加或删除属性,但可以修改现有属性
- Object.create(proto, [propertiesObject]):创建一个新对象,使用现有的对象作为新对象的原型,并可选择添加其他属性
- Object.hasOwnProperty(prop):返回一个布尔值,指示对象是否具有指定的属性。该方法不会检查原型链上的属性。
1、Object.keys(obj):返回一个数组,包含指定对象的所有可枚举属性的名称。
const person = {
name: 'John',
age: 30,
gender: 'male'
};
const keys = Object.keys(person);
console.log(keys); // 输出 ["name", "age", "gender"]
2、Object.values(obj):返回一个数组,包含指定对象的所有可枚举属性的值。
const person = {
name: 'John',
age: 30,
gender: 'male'
};
const values = Object.values(person);
console.log(values); // 输出 ["John", 30, "male"]
3、Object.entries(obj):返回一个包含指定对象所有可枚举属性的 [key, value]
数组。
const person = {
name: 'John',
age: 30,
gender: 'male'
};
const entries = Object.entries(person);
console.log(entries);
// 输出 [["name", "John"], ["age", 30], ["gender", "male"]]
4、 Object.assign(target, ...sources):将源对象的所有可枚举属性复制到目标对象中,并返回目标对象
参数说明:
-
target
: 目标对象,即要拷贝属性的对象。 -
sources
: 一个或多个源对象,即要从中复制属性的对象。可以传入多个源对象。
const target = { a: 1, b: 2 };
const source1 = { b: 3, c: 4 };
const source2 = { c: 5, d: 6 };
const newObj = Object.assign(target, source1, source2);
console.log(newObj); // { a: 1, b: 3, c: 5, d: 6 }
console.log(target); // { a: 1, b: 3, c: 5, d: 6 }
5、Object.freeze(obj):冻结一个对象,使其不能被修改、添加或删除属性
const obj = {
name: 'John',
age: 30
};
// 冻结对象
Object.freeze(obj);
// 尝试修改对象属性
obj.name = 'Mary'; // 不会生效
// 尝试添加新属性
obj.address = '123 Main St'; // 不会生效
console.log(obj); // 输出:{ name: 'John', age: 30 }
6、Object.seal(obj):封闭一个对象,使其不能添加或删除属性,但可以修改现有属性
const myObj = {
name: "John",
age: 30
};
// 密封对象
Object.seal(myObj);
// 修改属性值
myObj.age = 35;
console.log(myObj.age); // 输出 35
// 添加新属性
myObj.gender = "Male"; // 不会生效,因为对象已经被密封
console.log(myObj.gender); // 输出 undefined
// 删除属性
delete myObj.name; // 不会生效,因为属性已经被设置为不可配置
console.log(myObj.name); // 输出 "John"
7、Object.create(proto, [propertiesObject]):创建一个新对象,使用现有的对象作为新对象的原型,并可选择添加其他属性
下面是一个使用 Object.create()
方法创建新对象的示例代码:
const proto = {
greeting: 'Hello',
greet() {
console.log(this.greeting);
}
};
const obj = Object.create(proto, {
name: {
value: 'John',
enumerable: true,
writable: false,
configurable: true
}
});
obj.greet(); // 输出 "Hello"
console.log(obj.name); // 输出 "John"
// 尝试将 name 属性更改为 "Jane"
obj.name = 'Jane'; // 抛出 TypeError,因为属性是不可写的
// 尝试删除 name 属性
delete obj.name; // 返回 true,因为属性是可配置的
console.log(obj.name); // 输出 undefined
8、Object.hasOwnProperty(prop):返回一个布尔值,指示对象是否具有指定的属性。该方法不会检查原型链上的属性。
const person = {
name: 'John',
age: 30,
gender: 'male'
};
console.log(person.hasOwnProperty('name')); // 输出 true
console.log(person.hasOwnProperty('toString')); // 输出 false