返回

Object 对象(构造函数)的方法详解

前端

1. Object.assign() 方法

功能:
Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。

语法:

Object.assign(target, ...sources)

参数:

  • target:目标对象。
  • sources:要复制属性的源对象。可以传递多个源对象。

示例:

const obj1 = {
  name: 'John',
  age: 30
};

const obj2 = {
  city: 'New York',
  state: 'NY'
};

const obj3 = Object.assign(obj1, obj2);

console.log(obj3);
// { name: 'John', age: 30, city: 'New York', state: 'NY' }

注意事项:

  • Object.assign() 方法不会复制目标对象的现有属性。
  • 如果源对象中的属性与目标对象中的属性同名,则源对象中的属性值将覆盖目标对象中的属性值。
  • Object.assign() 方法不会复制源对象中的不可枚举属性和符号属性。

2. Object.create() 方法

功能:

Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。

语法:

Object.create(proto, propertiesObject)

参数:

  • proto:新对象的原型对象。可以是任何对象,包括 null。
  • propertiesObject:一个可选的对象,用于指定新对象的属性。

示例:

const person = {
  name: 'John',
  age: 30
};

const employee = Object.create(person, {
  salary: {
    value: 50000,
    writable: true
  }
});

console.log(employee);
// { name: 'John', age: 30, salary: 50000 }

注意事项:

  • Object.create() 方法创建的新对象将继承原型对象的所有可枚举属性和不可枚举属性。
  • Object.create() 方法创建的新对象不会继承原型对象的原型对象。
  • Object.create() 方法创建的新对象可以修改原型对象的可写属性,但不能修改原型对象本身。

3. Object.defineProperties() 方法

功能:

Object.defineProperties() 方法直接在对象上定义新的属性或修改现有属性,并允许你配置属性的各种特性,包括值、可写性、可枚举性和可配置性。

语法:

Object.defineProperties(obj, props)

参数:

  • obj:目标对象。
  • props:一个对象,用于指定要定义或修改的属性。

示例:

const obj = {};

Object.defineProperties(obj, {
  name: {
    value: 'John',
    writable: true,
    enumerable: true,
    configurable: true
  },
  age: {
    value: 30,
    writable: false,
    enumerable: true,
    configurable: false
  }
});

console.log(obj);
// { name: 'John', age: 30 }

注意事项:

  • Object.defineProperties() 方法可以定义或修改多个属性。
  • Object.defineProperties() 方法可以配置属性的各种特性,包括值、可写性、可枚举性和可配置性。
  • Object.defineProperties() 方法不能修改对象的现有属性的特性。

4. Object.freeze() 方法

功能:

Object.freeze() 方法冻结一个对象,使它不能被修改。

语法:

Object.freeze(obj)

参数:

  • obj:要冻结的对象。

示例:

const obj = {
  name: 'John',
  age: 30
};

Object.freeze(obj);

obj.name = 'Jane';
obj.age = 31;

console.log(obj);
// { name: 'John', age: 30 }

注意事项:

  • Object.freeze() 方法冻结对象的所有属性,包括可写属性和不可写属性。
  • Object.freeze() 方法冻结对象后,对象不能被修改,也不能添加或删除属性。
  • Object.freeze() 方法不会冻结对象的原型对象。

5. Object.getOwnPropertyDescriptor() 方法

功能:

Object.getOwnPropertyDescriptor() 方法返回指定对象中指定属性的符。

语法:

Object.getOwnPropertyDescriptor(obj, prop)

参数:

  • obj:目标对象。
  • prop:要获取符的属性名称。

示例:

const obj = {
  name: 'John',
  age: 30
};

const descriptor = Object.getOwnPropertyDescriptor(obj, 'name');

console.log(descriptor);
// { value: 'John', writable: true, enumerable: true, configurable: true }

注意事项:

  • Object.getOwnPropertyDescriptor() 方法返回指定属性的描述符,描述符是一个对象,包含属性的各种特性,包括值、可写性、可枚举性和可配置性。
  • Object.getOwnPropertyDescriptor() 方法不会返回对象原型对象中属性的描述符。

6. Object.getPrototypeOf() 方法

功能:

Object.getPrototypeOf() 方法返回指定对象的原型对象。

语法:

Object.getPrototypeOf(obj)

参数:

  • obj:目标对象。

示例:

const obj = {
  name: 'John',
  age: 30
};

const prototype = Object.getPrototypeOf(obj);

console.log(prototype);
// {}

注意事项:

  • Object.getPrototypeOf() 方法返回指定对象的原型对象。
  • Object.getPrototypeOf() 方法返回的对象是 null,表示该对象没有原型对象。

7. Object.is() 方法

功能:

Object.is() 方法比较两个值是否相等,与严格相等运算符 (===) 类似,但它可以处理一些特殊情况,如 NaN 和 -0。

语法:

Object.is(value1, value2)

参数:

  • value1:要比较的第一个值。
  • value2:要比较的第二个值。

示例:

console.log(Object.is(NaN, NaN)); // true
console.log(Object.is(-0, 0)); // true
console.log(Object.is(true, 1)); // false

注意事项:

  • Object.is() 方法比较两个值是否相等,与严格相等运算符 (===) 类似,但它可以处理一些特殊情况,如 NaN 和 -0。
  • Object.is() 方法比较两个值是否相等,而不考虑它们的类型。

8. Object.isExtensible() 方法

功能:

Object.isExtensible() 方法检查一个对象是否可以添加新的属性。

语法:

Object.isExtensible(obj)

参数:

  • obj:要检查的对象。

示例:

const obj = {};

console.log(Object.isExtensible(obj)); // true

Object.freeze(obj);

console.log(Object.isExtensible(obj)); // false

注意事项:

  • Object.isExtensible() 方法检查一个对象是否可以添加新的属性。
  • Object.isExtensible() 方法返回一个布尔值,如果对象可以添加新的属性,则返回 true,否则返回 false。

9. Object.keys() 方法

功能:

Object.keys() 方法返回一个数组,其中包含对象所有可枚举属性的名称。

语法:

Object.keys(obj)

参数:

  • obj:要