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 相关文章推荐
基于jquery的checkbox下拉框插件代码
Jun 25 Javascript
Javascript类库的顶层对象名用户体验分析
Oct 24 Javascript
jQuery阻止冒泡和HTML默认操作
Nov 17 Javascript
IE下JS读取xml文件示例代码
Aug 05 Javascript
javascript操作符&quot;!~&quot;详解
Feb 10 Javascript
jquery带下拉菜单和焦点图代码分享
Aug 24 Javascript
Bootstrap学习笔记之css样式设计(2)
Jun 07 Javascript
完美解决jQuery的hover事件在IE中不停闪动的问题
Feb 10 Javascript
详谈JS中数组的迭代方法和归并方法
Aug 11 Javascript
JS中的算法与数据结构之常见排序(Sort)算法详解
Aug 16 Javascript
vue中配置scss全局变量的步骤
Dec 28 Vue.js
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
Mar 01 Vue.js
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
杏林同学录(九)
2006/10/09 PHP
表单项的name命名为submit、reset引起的问题
2007/12/22 Javascript
基于jQuery实现的水平和垂直居中的div窗口
2011/08/08 Javascript
使用Grunt.js管理你项目的应用说明
2013/04/24 Javascript
深入分析原生JavaScript事件
2014/12/29 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
2016/10/26 Javascript
浅谈js键盘事件全面控制
2016/12/01 Javascript
JavaScript登录记住密码操作(超简单代码)
2017/03/22 Javascript
基于Vue2的独立构建与运行时构建的差别(详解)
2017/12/06 Javascript
解决vue build打包之后首页白屏的问题
2018/03/06 Javascript
基于vue框架手写一个notify插件实现通知功能的方法
2019/03/31 Javascript
WEEX环境搭建与入门详解
2019/10/16 Javascript
详解jQuery中的prop()使用方法
2020/01/05 jQuery
vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多(步骤详解)
2020/01/14 Javascript
Vue项目如何引入bootstrap、elementUI、echarts
2020/11/26 Vue.js
[06:16]《DAC最前线》之地区预选赛全面回顾
2015/01/19 DOTA
Python实现Tab自动补全和历史命令管理的方法
2015/03/12 Python
python使用pandas实现数据分割实例代码
2018/01/25 Python
python处理csv中的空值方法
2018/06/22 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
2019/06/21 Python
Python爬虫动态ip代理防止被封的方法
2019/07/07 Python
Django admin model 汉化显示文字的实现方法
2019/08/12 Python
利用pyecharts实现地图可视化的例子
2019/08/12 Python
python科学计算之scipy——optimize用法
2019/11/25 Python
一款纯css3实现的鼠标经过按钮特效教程
2014/11/09 HTML / CSS
澳洲国民品牌乡村路折扣店:Country Road & Trenery Outlet
2018/04/19 全球购物
如何判断计算机可能已经中马
2013/03/22 面试题
为什么Runtime.exec(“ls”)没有任何输出?
2014/10/03 面试题
若干个Java基础面试题
2015/05/19 面试题
大学生实习自我鉴定
2013/12/11 职场文书
幼儿园数学教学反思
2014/02/02 职场文书
师德师风承诺书
2014/05/23 职场文书
小学二年级数学教学计划
2015/01/20 职场文书
学籍证明模板
2015/06/18 职场文书
《自己的花是让别人看的》教学反思
2016/02/19 职场文书
美元符号 $
2022/02/17 杂记