JavaScript 中的 Object 全面总结

发布于:2025-07-04 ⋅ 阅读:(23) ⋅ 点赞:(0)

1. 什么是 Object?

Object(对象)是 JavaScript 中最基础的数据结构,用于存储键值对(key-value pairs)。

  • 本质:无序的属性集合,所有对象都继承自 Object.prototype

  • 特点

    • 属性键为字符串或 Symbol 类型

    • 值可以是任意数据类型(包括函数和其他对象)

  • 示例

    const person = {
      name: 'Alice',  // 字符串属性
      age: 25,        // 数字属性
      sayHi() {       // 方法
        console.log('Hi!');
      }
    };

2. 创建 Object 的 4 种方式

方式 示例 适用场景
字面量 const obj = { key: 'value' } 最常用,简单场景
构造函数 const obj = new Object() 需要显式构造时
Object.create() const obj = Object.create(proto) 需要控制原型链继承
Class class Person {}
const obj = new Person()
面向对象编程

3. Object 的 10 个核心方法

1. Object.keys(obj)

作用:返回对象自身的可枚举属性名数组(不包含原型链上的属性)。
示例

const user = { name: "Alice", age: 25 };
const keys = Object.keys(user); // ["name", "age"]
2. Object.values(obj)

作用:返回对象自身的可枚举属性值数组
示例

const user = { name: "Alice", age: 25 };
const values = Object.values(user); // ["Alice", 25]
3. Object.entries(obj)

作用:返回对象的 [key, value] 键值对数组。
示例

const user = { name: "Alice", age: 25 };
const entries = Object.entries(user); // [["name", "Alice"], ["age", 25]]
4. Object.assign(target, ...sources)

作用:合并多个对象(浅拷贝)。
示例

const obj1 = { a: 1 };
const obj2 = { b: 2 };
const merged = Object.assign({}, obj1, obj2); // { a: 1, b: 2 }
5. Object.freeze(obj)

作用:冻结对象,使其不可修改(不能增删改属性)。
示例

const user = { name: "Alice" };
Object.freeze(user);
user.name = "Bob"; // 静默失败(严格模式会报错)
console.log(user.name); // "Alice"
6. Object.seal(obj)

作用:密封对象,不能增删属性,但可以修改现有属性。
示例

const user = { name: "Alice" };
Object.seal(user);
user.name = "Bob"; // 允许修改
user.age = 25; // 静默失败(严格模式会报错)
7. Object.defineProperty(obj, prop, descriptor)

作用:定义或修改对象的属性特性(如 writableenumerable)。
示例

const obj = {};
Object.defineProperty(obj, "x", {
  value: 1,
  writable: false, // 不可修改
});
obj.x = 2; // 静默失败(严格模式会报错)
console.log(obj.x); // 1
8. obj.hasOwnProperty(key)

作用:检查属性是否为对象自身的属性(不包含继承的属性)。
示例

const user = { name: "Alice" };
console.log(user.hasOwnProperty("name")); // true
console.log(user.hasOwnProperty("toString")); // false(继承自 Object.prototype)
9. obj.toString()

作用:返回对象的字符串表示(默认返回 [object Object])。
示例

const obj = {};
console.log(obj.toString()); // "[object Object]"

// 自定义 toString()
const person = {
  name: "Alice",
  toString() {
    return `Person: ${this.name}`;
  },
};
console.log(person.toString()); // "Person: Alice"
10. Object.is(value1, value2)

作用:比 === 更严格的比较(适用于 NaN 和 +0/-0)。
示例

console.log(Object.is(NaN, NaN)); // true(=== 返回 false)
console.log(Object.is(+0, -0)); // false(=== 返回 true)
console.log(Object.is(5, "5")); // false(=== 也返回 false)
方法/操作 作用 示例
Object.keys() 获取对象自身可枚举属性名数组 Object.keys({a:1}) → ['a']
Object.values() 获取对象自身可枚举属性值数组 Object.values({a:1}) → [1]
Object.entries() 获取 [key, value] 数组 Object.entries({a:1}) → [['a',1]]
Object.assign() 合并对象(浅拷贝) Object.assign({a:1}, {b:2}) → {a:1, b:2}
Object.freeze() 冻结对象(不可修改) Object.freeze(obj)
Object.seal() 密封对象(不能增删属性) Object.seal(obj)
Object.defineProperty() 定义/修改属性特性 Object.defineProperty(obj, 'x', {value:1})
hasOwnProperty() 检查是否自身属性(非继承) obj.hasOwnProperty('key')
toString() 返回对象字符串表示 obj.toString()
Object.is() 比 === 更精确的值比较 Object.is(NaN, NaN) → true

4. Object 的 5 大使用场景

  1. 数据封装

    const user = {
      id: 1,
      name: 'Alice',
      profile: { age: 25 }
    };
  2. 配置参数传递

    function init({ url, timeout = 1000 }) {
      // ...
    }
    init({ url: '/api', timeout: 2000 });
  3. 模拟字典/映射

    const colorMap = {
      red: '#FF0000',
      green: '#00FF00'
    };
  4. 面向对象编程

    function Person(name) {
      this.name = name;
    }
    Person.prototype.sayHi = function() {
      console.log(`Hi, I'm ${this.name}`);
    };
  5. JSON 数据交互

    const jsonStr = JSON.stringify(obj);
    const parsedObj = JSON.parse(jsonStr);


网站公告

今日签到

点亮在社区的每一天
去签到