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的IE和Firefox兼容性集锦
Dec 11 Javascript
js取得url地址参数实例
Feb 22 Javascript
深入理解Javascript中this的作用域
Aug 12 Javascript
Jquery弹出层插件ThickBox的使用方法
Dec 09 Javascript
DOM节点删除函数removeChild()用法实例
Jan 12 Javascript
JS添加或修改控件的样式(Class)实现方法
Oct 15 Javascript
jQuery使用Layer弹出层插件闪退问题
Dec 22 Javascript
Angular2学习教程之组件中的DOM操作详解
May 28 Javascript
详解vue+css3做交互特效的方法
Nov 20 Javascript
微信小程序实现两边小中间大的轮播效果的示例代码
Dec 07 Javascript
Vue 数组和对象更新,但是页面没有刷新的解决方式
Nov 09 Javascript
微信小程序通过websocket实时语音识别的实现代码
Aug 19 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
ThinkPHP实现将SESSION存入MYSQL的方法
2014/07/22 PHP
php 猴子摘桃的算法
2017/06/20 PHP
浅析PHP echo 和 print 语句
2020/06/30 PHP
js 延迟加载 改变JS的位置加快网页加载速度
2012/12/11 Javascript
js验证输入是否为手机号码或电话号码示例
2013/12/30 Javascript
Javascript异步编程模型Promise模式详细介绍
2014/05/08 Javascript
JavaScript中的无阻塞加载性能优化方案
2014/10/10 Javascript
jquery处理json对象
2014/11/03 Javascript
javascript 闭包详解
2015/02/15 Javascript
jQuery使用中可能被XSS攻击的一些危险环节提醒
2016/05/24 Javascript
AngularJS内建服务$location及其功能详解
2016/07/01 Javascript
Javascript中将变量转换为字符串的三种方法
2017/09/19 Javascript
VUE预渲染及遇到的坑
2018/09/03 Javascript
angularJs复选框checkbox选中进行ng-show显示隐藏的方法
2018/10/08 Javascript
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
2019/05/21 Javascript
浅谈React Native 传参的几种方式(小结)
2019/05/21 Javascript
[42:32]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第二场 10.28
2020/10/28 DOTA
仅用50行Python代码实现一个简单的代理服务器
2015/04/08 Python
Python 文件操作的详解及实例
2017/09/18 Python
Django中反向生成models.py的实例讲解
2018/05/30 Python
TensorFlow梯度求解tf.gradients实例
2020/02/04 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
2020/02/06 Python
在Python中用GDAL实现矢量对栅格的切割实例
2020/03/11 Python
浅谈HTML5 &amp; CSS3的新交互特性
2016/07/19 HTML / CSS
THE OUTNET英国官网:国际设计师品牌折扣网站
2016/08/14 全球购物
英国护肤品购物网站:Beauty Expert
2016/08/19 全球购物
ProBikeKit新西兰:自行车套件,跑步和铁人三项装备
2017/04/05 全球购物
秋季婚礼证婚词
2014/01/11 职场文书
广告业务员岗位职责
2014/02/06 职场文书
《山谷中的谜底》教学反思
2014/04/26 职场文书
欢迎横幅标语
2014/06/17 职场文书
机关干部个人对照检查材料思想汇报
2014/09/28 职场文书
工作批评与自我批评范文
2014/10/16 职场文书
2014年公路养护工作总结
2014/12/04 职场文书
2014年英语教研组工作总结
2014/12/06 职场文书
情人节活动总结范文
2015/02/05 职场文书