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 相关文章推荐
js function定义函数的几种不错方法
Feb 27 Javascript
原生的html元素选择器类似jquery选择器
Oct 15 Javascript
node.js操作mysql(增删改查)
Jul 24 Javascript
Bootstrap富文本组件wysiwyg数据保存到mysql的方法
May 09 Javascript
js数组的五种迭代方法及两种归并方法(推荐)
Jun 14 Javascript
js 基础篇必看(点击事件轮播图的简单实现)
Aug 20 Javascript
js 获取元素的具体样式信息getcss(实例讲解)
Jul 05 Javascript
利用Angular2的Observables实现交互控制的方法
Dec 27 Javascript
node 标准输入流和输出流代码实例
Sep 19 Javascript
通过实例解析json与jsonp原理及使用方法
Sep 27 Javascript
原生js实现俄罗斯方块
Oct 20 Javascript
JS前端宏任务微任务及Event Loop使用详解
Jul 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 7.4中使用预加载的方法详解
2019/07/08 PHP
Laravel 模型关联基础教程详解
2019/09/17 PHP
jquery ui dialog里调用datepicker的问题
2009/08/06 Javascript
js为数字添加逗号并格式化数字的代码
2013/08/23 Javascript
js使用for循环及if语句判断多个一样的name
2014/09/09 Javascript
node.js中的buffer.fill方法使用说明
2014/12/14 Javascript
js实现的万能flv网页播放器代码
2016/04/30 Javascript
jQuery实现的超链接提示效果示例【附demo源码下载】
2016/09/09 Javascript
Ionic 2 实现列表滑动删除按钮的方法
2017/01/22 Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
2017/02/16 Javascript
JavaScript的继承实现小结
2017/05/07 Javascript
jQuery.ajax向后台传递数组问题的解决方法
2017/05/12 jQuery
微信小程序实现image组件图片自适应宽度比例显示的方法
2018/01/16 Javascript
vue.js2.0点击获取自己的属性和jquery方法
2018/02/23 jQuery
elementUI中Table表格问题的解决方法
2018/12/04 Javascript
JS实现点星星消除小游戏
2020/03/24 Javascript
深入理解 ES6中的 Reflect用法
2020/07/18 Javascript
python算法学习之计数排序实例
2013/12/18 Python
Python 2.x如何设置命令执行的超时时间实例
2017/10/19 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
2019/09/25 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
2019/09/28 Python
纽约著名的服装辅料来源:M&J Trimming
2017/07/26 全球购物
英国日常交易网站:Wowcher
2018/09/04 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
2016/08/18 面试题
Laravel中Kafka的使用详解
2021/03/24 PHP
销售员个人求职的自我评价
2014/02/10 职场文书
无毒社区工作方案
2014/05/23 职场文书
党支部三会一课计划
2014/09/24 职场文书
班主任师德师风自我剖析材料
2014/10/02 职场文书
亲属关系公证书样本
2015/01/23 职场文书
简单的辞职信模板
2015/05/12 职场文书
《梅花魂》教学反思
2016/02/18 职场文书
承诺书的内容有哪些,怎么写?
2019/06/21 职场文书
Golang 空map和未初始化map的注意事项说明
2021/04/29 Golang
2007年老电脑安装win11会怎么样? 网友实测win11在老电脑运行良好
2021/11/21 数码科技
小喇叭开始广播了! 四十多年前珍贵老照片
2022/05/09 无线电