对象冻结是使JavaScript对象不可修改的最严格防篡改方式,通过Object.freeze()实现浅冻结,需递归处理嵌套对象;另有seal、preventExtensions等防护等级较低的替代方案。

对象冻结是指让一个 JavaScript 对象变为不可修改的状态:不能添加、删除或更改其属性,也不能修改属性的描述符(如 writable、configurable、enumerable)。这是最严格的防篡改方式之一,常用于确保关键配置、常量或共享数据不被意外改动。
Object.freeze() 是最常用的方法,它会直接冻结传入的对象,并返回该对象(原地修改,不创建新对象)。
obj.name = "new")在严格模式下会报错,在非严格模式下静默失败示例:
const config = { api: "https://api.example.com", timeout: 5000 };因为 Object.freeze() 不处理深层对象,若要完全冻结整个结构(比如配置对象里有子对象),需要手动递归调用:
立即学习“Java免费学习笔记(深入)”;
Object.freeze()
null、原始类型(string/number/boolean)、函数、Date、RegExp 等非普通对象简易递归冻结函数示例:
function deepFreeze(obj) {根据需求强度不同,还有几个相关 API 可选:
writable: true 的属性仍可改)writable: false)或不可配置(configurable: false)三者防护等级:freeze > seal > preventExtensions。一般优先用 freeze,除非你明确需要保留某些修改能力。
可以用 Object.isFrozen(obj) 判断对象是否已被冻结。注意它只检查对象自身,不检查嵌套对象 —— 所以对深冻结对象,这个方法返回 false,除非你已递归冻结所有层级。
基本上就这些。冻结不是万能的(比如不能阻止原型链污染或 Symbol 属性误操作),但在大多数业务场景下,Object.freeze() 加上必要递归,已经足够可靠。
以上就是什么是对象冻结_javascript中如何防止对象被修改?的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号