const 对象的属性可以修改吗?

2024-07-31 21:27:55 168
在 JavaScript 中,使用 `const` 声明的对象,其引用本身是不可变的,即不能重新赋值为另一个对象。然而,`const` 对象的属性是可以修改的。这是因为 `const` 保证的是变量绑定的引用地址不变,而不保证引用对象的内部数据不变。

示例

const person = {
  name: "Alice",
  age: 25
};

// 修改属性
person.name = "Bob";
person.age = 30;

console.log(person); // 输出: { name: "Bob", age: 30 }

// 添加新属性
person.gender = "female";
console.log(person); // 输出: { name: "Bob", age: 30, gender: "female" }

// 删除属性
delete person.age;
console.log(person); // 输出: { name: "Bob", gender: "female" }

在这个示例中,虽然 person 是用 const 声明的对象,但我们依然可以修改其属性的值、添加新属性、或删除已有属性。

重要说明

  • const 关键字只能保证引用地址不变,不可重新赋值:

    const person = { name: "Alice" };
    person = { name: "Bob" }; // 会抛出 TypeError: Assignment to constant variable.
    
  • 如果你希望对象的内容也是不可变的,可以使用 Object.freeze() 方法将对象冻结:

    const person = { name: "Alice" };
    Object.freeze(person);
    
    person.name = "Bob"; // 无效修改,person 仍然是 { name: "Alice" }
    console.log(person.name); // 输出: "Alice"
    

使用 Object.freeze() 冻结对象后,该对象的属性将不能被修改、添加或删除。