防篡改对象
JavaScript多人开发协作过程中,很可能会意外篡改他人代码。防篡改对象,通过不可扩展、密封、冻结来解决这个问题。
需要特别注意的是:一旦把对象定义为防篡改,就无法撤销了。
1、不可扩展对象
1 var person = { 2 name: "Person Name" 3 } 4 Object.preventExtensions(person); 5 6 person.age = 29; 7 alert(person.age); // undefined
通过 Object.isExtensible([Object]) 可以确定对象是否可以扩展。 true 可以扩展, false 不可以扩展。
不可扩展的对象,不能新增属性。
2、密封的对象
1 var person = { 2 name: "Person Name" 3 } 4 Object.seal(person); 5 6 person.age = 29; 7 alert(person.age); // undefined 8 9 delete person.name; 10 alert(person.name); // Person Name
通过 Object.isSealed([Object]) 可以确定对象是否被密封了。
被密封的对方,不能新增属性,也不能删除属性。
3、冻结的对象
1 var person = { 2 name: "Person Name" 3 } 4 Object.freeze(person); 5 6 person.age = 29; 7 alert(person.age); // undefined 8 9 delete person.name; 10 alert(person.name); // Person Name 11 12 person.name = "New Name"; 13 alert(person.name); // Person Name
通过 Object.isFrozen([Object]) 来检测对象是否被冻结。
被冻结的对象,不能新增属性,并不能删除属性,也不能修改属性。
4、总结
冻结 > 密封 > 不可扩展
增 | 删 | 改 | |
不可扩展 | ✖️ | ✔️ | ✔️ |
密封 | ✖️ | ✖️ | ✔️ |
冻结 | ✖️ | ✖️ | ✖️ |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· 软件产品开发中常见的10个问题及处理方法
· Vite CVE-2025-30208 安全漏洞
· 《HelloGitHub》第 108 期
· MQ 如何保证数据一致性?