javascript防篡改对象实例详解


Posted in Javascript onApril 10, 2017

本文实例讲述了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程序设计有所帮助。

Javascript 相关文章推荐
在VS2008中使用jQuery智能感应的方法
Dec 30 Javascript
JQuery动态创建DOM、表单元素的实现代码
Aug 09 Javascript
JavaScript的Module模式编程深入分析
Aug 13 Javascript
js实现类似jquery里animate动画效果的方法
Apr 10 Javascript
关于JavaScript的变量的数据类型的判断方法
Aug 14 Javascript
jQuery如何使用自动触发事件trigger
Nov 29 Javascript
js实现div模拟模态对话框展现URL内容
May 27 Javascript
jQuery实现带遮罩层效果的blockUI弹出层示例【附demo源码下载】
Sep 14 Javascript
js实现简单的手风琴效果
Feb 27 Javascript
d3.js实现立体柱图的方法详解
Apr 28 Javascript
vue Element-ui input 远程搜索与修改建议显示模版的示例代码
Oct 19 Javascript
js验证身份证号码记录的方法
Apr 26 Javascript
jQuery EasyUI之验证框validatebox实例详解
Apr 10 #jQuery
ES6教程之for循环和Map,Set用法分析
Apr 10 #Javascript
javascript实现动态显示颜色块的报表效果
Apr 10 #Javascript
bootstrap如何让dropdown menu按钮式下拉框长度一致
Apr 10 #Javascript
ES6生成器用法实例分析
Apr 10 #Javascript
基于javascript的异步编程实例详解
Apr 10 #Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
Apr 10 #Javascript
You might like
VOLVO车载收音机
2021/03/02 无线电
几种显示数据的方法的比较
2006/10/09 PHP
用mysql触发器自动更新memcache的实现代码
2009/10/11 PHP
php 删除一个数组中的某个值.兼容多维数组!
2012/02/18 PHP
php记录代码执行时间(实现代码)
2013/07/05 PHP
如何写php守护进程(Daemon)
2015/12/30 PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
2016/04/15 PHP
php校验公钥是否可用的实例方法
2019/09/17 PHP
基于JQUERY的多级联动代码
2012/01/24 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
jQuery实现单击按钮遮罩弹出对话框(仿天猫的删除对话框)
2014/04/10 Javascript
js识别uc浏览器的代码
2015/11/06 Javascript
JS基于HTML5的canvas标签实现炫目的色相球动画效果实例
2016/08/24 Javascript
网站发布后Bootstrap框架引用woff字体无法正常显示的解决方法
2016/11/24 Javascript
使用异步controller与jQuery实现卷帘式分页
2019/06/18 jQuery
微信小程序input抖动问题的修复方法
2021/03/03 Javascript
Python 'takes exactly 1 argument (2 given)' Python error
2016/12/13 Python
用Python写脚本,实现完全备份和增量备份的示例
2018/04/29 Python
python实现微信自动回复机器人功能
2019/07/11 Python
python3多线程知识点总结
2019/09/26 Python
关于python pycharm中输出的内容不全的解决办法
2020/01/10 Python
Window系统下Python如何安装OpenCV库
2020/03/05 Python
Python xlrd/xlwt 创建excel文件及常用操作
2020/09/24 Python
使用phonegap检测网络状态的方法
2017/03/30 HTML / CSS
HTML5重塑Web世界它将如何改变互联网
2012/12/17 HTML / CSS
戴森台湾线上商城:Dyson Taiwan
2018/05/21 全球购物
应届生自我鉴定
2013/12/11 职场文书
圣诞节活动策划方案
2014/06/09 职场文书
农民工预备党员思想汇报
2014/09/14 职场文书
2014年销售助理工作总结
2014/12/01 职场文书
毕业生班级鉴定评语
2015/01/04 职场文书
幼儿教师小班个人总结
2015/02/05 职场文书
毕业生对母校寄语
2015/02/26 职场文书
单位收入证明范本
2015/06/18 职场文书
银行服务理念口号
2015/12/25 职场文书
Spring依赖注入多种类型数据的示例代码
2022/03/31 Java/Android