防篡改对象

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、总结

冻结 > 密封 > 不可扩展

 
不可扩展 ✖️ ✔️ ✔️
密封 ✖️ ✖️ ✔️
冻结 ✖️ ✖️ ✖️
posted @   就只是小茗  阅读(274)  评论(0编辑  收藏  举报
编辑推荐:
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
阅读排行:
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· 软件产品开发中常见的10个问题及处理方法
· Vite CVE-2025-30208 安全漏洞
· 《HelloGitHub》第 108 期
· MQ 如何保证数据一致性?
点击右上角即可分享
微信分享提示