const声明的变量绑定不可变,即标识符始终指向同一内存地址,但对象内部属性可修改;若需冻结对象内容,应使用object.freeze()实现浅冻结。

const 声明的对象本身不能重新赋值,但对象内部的属性可以修改。这是因为 const 限制的是“绑定不可变”,即变量名始终指向同一个内存地址,而不是冻结对象内容。
为什么 const 对象还能改属性?
JavaScript 中对象是引用类型。const obj = {} 表示 obj 这个标识符永远指向堆内存中那个对象地址。只要不把 obj 指向新对象(比如 obj = {}),修改它的属性、添加或删除键值对都是允许的。
可以做的操作(合法)
- 修改已有属性:
obj.name = "Alice"或obj["age"] = 30 - 添加新属性:
obj.city = "Beijing" - 删除属性:
delete obj.age - 修改嵌套对象或数组内容:
obj.profile.bio = "Hello",obj.tags.push("JS")
不可以做的操作(会报错)
- 重新赋值整个变量:
obj = { id: 2 }→ 报错TypeError: Assignment to constant variable - 在声明时未初始化:
const obj;→ 报错SyntaxError: Missing initializer in const declaration
如果想真正冻结对象,要用 Object.freeze()
Object.freeze() 可以阻止新增、删除、修改自有属性(浅冻结):
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
// 示例const user = Object.freeze({ name: "Tom", score: 95 });user.name = "Jerry"; // 无效,严格模式下还会报错user.rank = "A"; // 无效console.log(user); // { name: "Tom", score: 95 }
注意:它只冻结第一层,嵌套对象仍可修改。如需深冻结,需手动递归或借助第三方库。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










