const 对象的属性可以修改吗?
资料来源:前端面试资料
在 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() 冻结对象后,该对象的属性将不能被修改、添加或删除。