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 相关文章推荐
Javascript 网页黑白效果实现代码(兼容IE/FF等)
Apr 23 Javascript
JS实现将人民币金额转换为大写的示例代码
Feb 13 Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
Aug 11 Javascript
基于jquery实现复选框全选,反选,全不选等功能
Oct 16 Javascript
JavaScript中Form表单技术汇总(推荐)
Jun 26 Javascript
瀑布流的实现方式(原生js+jquery+css3)
Jun 28 Javascript
jQuery 操作input中radio的技巧
Jul 18 Javascript
如何检测JavaScript的各种类型
Jul 30 Javascript
jQuery图片加载显示loading效果
Nov 04 Javascript
基于jQuery实现瀑布流页面
Apr 11 jQuery
js模拟支付宝密码输入框
Apr 11 Javascript
vue实现app页面切换动画效果实例
May 23 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
修改了一个很不错的php验证码(支持中文)
2007/02/14 PHP
解析PHP中$_FILES的使用以及注意事项
2013/07/05 PHP
浅析PHP的静态成员函数效率更高的原因
2014/06/13 PHP
PHP清除字符串中所有无用标签的方法
2014/12/01 PHP
Joomla数据库操作之JFactory::getDBO用法
2016/05/05 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
2016/12/23 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
2017/08/04 PHP
PHP命令Command模式用法实例分析
2018/08/08 PHP
PHP封装cURL工具类与应用示例
2019/07/01 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
2020/05/26 PHP
jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)
2010/04/25 Javascript
IE 当eval遇上function的处理
2011/08/09 Javascript
Javascript继承机制的设计思想分享
2011/08/28 Javascript
js鼠标滑过图片震动特效的方法
2015/02/17 Javascript
JS实现浏览器状态栏显示时间的方法
2015/10/27 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
2016/02/19 Javascript
JavaScript sort数组排序方法和自我实现排序方法小结
2016/06/06 Javascript
JavaScript实现的浏览器下载文件的方法
2017/08/09 Javascript
jQuery使用zTree插件实现可拖拽的树示例
2017/09/23 jQuery
微信小程序实现action-sheet弹出底部菜单功能【附源码下载】
2017/12/09 Javascript
js canvas实现二维码和图片合成的海报
2020/11/19 Javascript
微信端调取相册和摄像头功能,实现图片上传,并上传到服务器
2019/05/16 Javascript
vue 使用 canvas 实现手写电子签名
2020/03/06 Javascript
Vue 自适应高度表格的实现方法
2020/05/13 Javascript
jQuery实现动态加载瀑布流
2020/09/01 jQuery
微信小程序实现倒计时功能
2020/11/19 Javascript
python实现图像全景拼接
2020/03/27 Python
关于Kotlin中SAM转换的那些事
2020/09/15 Python
重构Python代码的六个实例
2020/11/25 Python
HTML5实现可缩放时钟代码
2017/08/28 HTML / CSS
应届生护士求职信
2013/11/01 职场文书
五十岁生日宴会答谢词
2014/01/15 职场文书
财务人员担保书
2014/05/13 职场文书
党员教师群众路线对照检查材料思想汇报
2014/09/29 职场文书
导游词之吉林吉塔
2019/11/11 职场文书
win10系统xps文件怎么打开?win10打开xps文件的两种操作方法
2022/07/23 数码科技