在 JavaScript 中,Object 是一个内置的构造函数,提供了许多实用的静态方法和实例方法,用于操作对象。以下是 Object 上常用方法的详细说明:


1. 静态方法

(1) Object.assign(target, ...sources)

  • 作用:将一个或多个源对象的属性 到目标对象。

  • 返回值:目标对象。

  • 注意:浅拷贝,只 可枚举的自有属性。

示例:
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() { console.log("Hello!"); } };
const obj = Object.create(proto);

obj.greet(); // 输出: Hello!

(3) Object.defineProperty(obj, prop, descriptor)

  • 作用:在对象上定义一个新属性,或修改现有属性。

  • 参数

    • obj:目标对象。

    • prop:属性名称。

    • descriptor:属性描述符(如 valuewritableenumerableconfigurable)。

示例:
const obj = {};

Object.defineProperty(obj, "name", {
  value: "Alice",
  writable: false, // 不可修改
  enumerable: true // 可枚举
});

console.log(obj.name); // 输出: Alice
obj.name = "Bob"; // 无效,因为 writable 为 false
console.log(obj.name); // 输出: Alice


(4) Object.entries(obj)

  • 作用:返回一个对象自身可枚举属性的键值对数组。

  • 返回值:二维数组,每个元素是 [key, value]

示例:
onst obj = { a: 1, b: 2 };
console.log(Object.entries(obj)); // 输出: [['a', 1], ['b', 2]]


(5) Object.keys(obj)

  • 作用:返回一个对象自身可枚举属性的键名数组。

  • 返回值:字符串数组。

示例:
const obj = { a: 1, b: 2 };
console.log(Object.keys(obj)); // 输出: ['a', 'b']


(6) Object.values(obj)

  • 作用:返回一个对象自身可枚举属性的值数组。

  • 返回值:值数组。

示例:
const obj = { a: 1, b: 2 };
console.log(Object.values(obj)); // 输出: [1, 2]


(7) Object.freeze(obj)

  • 作用:冻结一个对象,使其不能被修改(不能添加、删除或修改属性)。

  • 返回值:被冻结的对象。

示例:
const obj = { a: 1 };
Object.freeze(obj);

obj.a = 2; // 无效
console.log(obj.a); // 输出: 1


(8) Object.seal(obj)

  • 作用:密封一个对象,使其不能添加或删除属性,但可以修改现有属性。

  • 返回值:被密封的对象。

示例:
const obj = { a: 1 };
Object.seal(obj);

obj.a = 2; // 有效
obj.b = 3; // 无效
console.log(obj); // 输出: { a: 2 }

(9) Object.is(value1, value2)

  • 作用:比较两个值是否严格相等(类似于 ===,但处理 NaN 和 +0/-0 更准确)。

  • 返回值:布尔值。

示例:
console.log(Object.is(NaN, NaN)); // 输出: true
console.log(Object.is(+0, -0));   // 输出: false


(10) Object.getPrototypeOf(obj)

  • 作用:返回指定对象的原型。

  • 返回值:对象的原型。

示例:
const proto = {};
const obj = Object.create(proto);

console.log(Object.getPrototypeOf(obj) === proto); // 输出: true

2. 实例方法

(1) obj.hasOwnProperty(prop)

  • 作用:检查对象是否具有指定的自有属性(不包括原型链上的属性)。

  • 返回值:布尔值。

示例:
const obj = { a: 1 };
console.log(obj.hasOwnProperty("a")); // 输出: true
console.log(obj.hasOwnProperty("toString")); // 输出: false


(2) obj.toString()

  • 作用:返回对象的字符串表示。

  • 返回值:字符串。

示例:
const obj = { a: 1 };
console.log(obj.toString()); // 输出: [object Object]


(3) obj.valueOf()

  • 作用:返回对象的原始值。

  • 返回值:对象的原始值。

示例:
const obj = { a: 1 };
console.log(obj.valueOf()); // 输出: { a: 1 }


3. 总结

方法 作用 返回值
Object.assign() 属性到目标对象 目标对象
Object.create() 创建新对象,指定原型 新对象
Object.defineProperty() 定义或修改属性 目标对象
Object.entries() 返回对象的键值对数组 二维数组
Object.keys() 返回对象的键名数组 字符串数组
Object.values() 返回对象的值数组 值数组
Object.freeze() 冻结对象,使其不可修改 被冻结的对象
Object.seal() 密封对象,使其不可添加或删除属性 被密封的对象
Object.is() 比较两个值是否严格相等 布尔值
Object.getPrototypeOf() 返回对象的原型 对象的原型
obj.hasOwnProperty() 检查对象是否具有指定的自有属性 布尔值
obj.toString() 返回对象的字符串表示 字符串
obj.valueOf() 返回对象的原始值 原始值