在JavaScript中,Object是所有对象的基类,它具有许多常用方法。以下是其中一些常见的方法以及它们的示例用法:

  1. Object.keys(obj):返回一个由给定对象自身可枚举属性组成的数组
  2. Object.values(obj):返回一个给定对象所有可枚举属性值的数组
  3. Object.entries(obj):返回一个给定对象自身可枚举属性的键值对数组
  4. Object.assign(target, ...sources):将源对象的所有可枚举属性复制到目标对象中,并返回目标对象
  5. Object.freeze(obj):冻结一个对象,使其不能被修改、添加或删除属性
  6. Object.seal(obj):封闭一个对象,使其不能添加或删除属性,但可以修改现有属性
  7. Object.create(proto, [propertiesObject]):创建一个新对象,使用现有的对象作为新对象的原型,并可选择添加其他属性
  8. 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