JavaScript防篡改对象详解:不可拓展、密封与冻结
本文详解JavaScript中三种防篡改对象:不可拓展、密封和冻结。通过Object.preventExtensions、Object.seal和Object.freeze方法,分别限制属性添加、删除及修改,确保对象结构稳定。
本文通过具体实例介绍JavaScript中的防篡改对象,供读者参考学习。
JavaScript对象的可扩展性与防篡改需求
JavaScript对象内置Configurable、Writable、Enumerable、Value、Get和Set等属性,用于控制属性行为。ES5也提供了相应方法来指定对象行为。JavaScript对象默认是可共享且可扩展的:
//一旦将对象设置防篡改,就不能撤销了
//众所周知,一般的对象是可以随意拓展的
var person = {name:'liufang'};
person.age = 22;
document.write(person.age+"<br>");//22
我们可以自由添加、删除或修改对象的属性和方法。但这可能引发问题,例如多人协作时属性被意外修改,导致工程维护困难。因此,防篡改对象应运而生。防篡改对象分为三个级别:不可拓展对象、密封对象和冻结对象。
不可拓展对象
不可拓展对象
首先介绍不可拓展对象。通过将普通对象设置为不可拓展,可以阻止新属性的添加:
//防拓展对象
Object.preventExtensions(person);//设置为防拓展对象
person.smallName = 'ff';
document.write(person.smallName+"<br>");//undefined
//说明不能添加新属性
//检测是否为可拓展对象
document.write(Object.isExtensible(person)+"<br>");//false
//虽然防拓展对象不能添加属性,但是可以删除属性
delete person.age;
document.write(person.age+"<br>");//undefined ,已经删除成功
如上所示,不可拓展对象能防止新增属性,但无法阻止属性删除或修改。因此,引入了第二级别的密封对象。
密封对象
密封对象
密封对象在不可拓展的基础上,进一步禁止属性删除。
//密封对象
//在不可拓展的基础上也不能删除
var people = {name:'liufang'};
Object.seal(people);//将对象密封
delete people.name;
document.write(people.name+"<br>");//liufang ,说明不能删除
people.name = "tyq";//虽然不能删除,但是可以修改
document.write(people.name+"<br>");//tyq ,说明修改成功
//检测
document.write(Object.isSealed(people)+"<br>");//true
可见,密封对象虽防止了删除,但仍允许修改属性。因此,存在最高级别的冻结对象。
冻结对象
冻结对象
被冻结的对象既不可拓展,也不允许删除或修改属性。
//冻结对象
//不能拓展,不能删除,不能修改
var man = {name:'tyq'};
Object.freeze(man);
//检测
document.write(Object.isFrozen(man));//true
需注意,一旦对象被设置为防篡改状态,该操作不可撤销,因此需谨慎使用。
更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript中json操作技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript动画特效与技巧汇总》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
JS大数值转字符串出现科学计数法怎么办
2026-11-05 17:09:21
JS split切割后出现空字符串怎么过滤
2026-11-05 16:00:30
在 React 或 Vue 项目中封装使用 JS 节流防抖
2026-11-05 15:27:29
JavaScript中怎么将带小数的字符串转为整数?
2026-11-05 14:32:38
怎么用JavaScript策略模式重构电商促销计算逻辑?
2026-11-05 14:01:09
