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 相关文章推荐
ie下动态加态js文件的方法
Sep 13 Javascript
兼容IE、FireFox、Chrome等浏览器的xml处理函数js代码
Nov 30 Javascript
jquery 跳到顶部和底部动画2句代码简单实现
Jul 18 Javascript
Webpack中css-loader和less-loader的使用教程
Apr 27 Javascript
Vuex利用state保存新闻数据实例
Jun 28 Javascript
微信小程序视图template模板引用的实例详解
Sep 20 Javascript
jQuery实现的两种简单弹窗效果示例
Apr 18 jQuery
vue组件中的样式属性scoped实例详解
Oct 30 Javascript
Vue组件模板及组件互相引用代码实例
Mar 11 Javascript
JavaScript Array.flat()函数用法解析
Sep 02 Javascript
利用JavaScript为句子加标题的3种方法示例
Jan 05 Javascript
js实现碰撞检测
Jan 29 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新闻发布系统教程
2014/05/09 PHP
ThinkPHP3.1之D方法实例详解
2014/06/20 PHP
PHP生成图片验证码、点击切换实例
2014/06/25 PHP
PHP 9 大缓存技术总结
2015/09/17 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
2016/06/12 PHP
身份证号码前六位所代表的省,市,区, 以及地区编码下载
2007/04/12 Javascript
AngularJS中的Directive自定义一个表格
2016/01/25 Javascript
浅析JS异步加载进度条
2016/05/05 Javascript
JS hashMap实例详解
2016/05/26 Javascript
js实现带缓动动画的导航栏效果
2017/01/16 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
2018/07/25 Javascript
NVM安装nodejs的方法实用步骤
2019/01/16 NodeJs
vue2.0基于vue-cli+element-ui制作树形treeTable
2019/04/30 Javascript
使用vue编写h5公众号跳转小程序的实现代码
2020/11/27 Vue.js
Python中字典创建、遍历、添加等实用操作技巧合集
2015/06/02 Python
Python 中 list 的各项操作技巧
2017/04/13 Python
Python信息抽取之乱码解决办法
2017/06/29 Python
Python实现采用进度条实时显示处理进度的方法
2017/12/19 Python
Python内置模块logging用法实例分析
2018/02/12 Python
Pycharm导入Python包,模块的图文教程
2018/06/13 Python
Python之用户输入的实例
2018/06/22 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
2018/11/10 Python
DataFrame:通过SparkSql将scala类转为DataFrame的方法
2019/01/29 Python
python增加图像对比度的方法
2019/07/12 Python
Python collections中的双向队列deque简单介绍详解
2019/11/04 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
2020/07/07 Python
python os.rename实例用法详解
2020/12/06 Python
CSS3中Color的一些特性介绍
2012/05/27 HTML / CSS
HTML文本属性&amp;颜色控制属性的实现
2019/12/17 HTML / CSS
非凡女性奢华谦虚风格:The Modist
2017/10/28 全球购物
毕业研究生的自我鉴定
2013/11/30 职场文书
行政专员岗位职责说明书
2014/07/30 职场文书
公务员群众路线专题民主生活会发言材料
2014/09/17 职场文书
乡镇党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
人代会简报
2015/07/21 职场文书
Java 常见的限流算法详细分析并实现
2022/04/07 Java/Android