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的获取浏览器窗口大小的代码
Mar 28 Javascript
js字符串的各种格式的转换 ToString,Format
Aug 08 Javascript
jquery实现当滑动到一定位置时固定效果
Jun 17 Javascript
jQuery学习笔记之jQuery+CSS3的浏览器兼容性
Jan 19 Javascript
input file上传 图片预览功能实例代码
Oct 25 Javascript
JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法
Jan 03 Javascript
JS验证不重复验证码
Feb 10 Javascript
如何使用Bootstrap 按钮实例详解
Mar 29 Javascript
vue.js添加一些触摸事件以及安装fastclick的实例
Aug 28 Javascript
解决layui的input独占一行的问题
Sep 10 Javascript
layui 解决富文本框form表单提交为空的问题
Oct 26 Javascript
JavaScript中如何对多维数组(矩阵)去重的实现
Dec 04 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
使用 eAccelerator加速PHP代码的方法
2007/09/30 PHP
discuz Passport 通行证 整合笔记
2008/06/30 PHP
PHP 地址栏信息的获取代码
2009/01/07 PHP
php split汉字
2009/06/05 PHP
php上传文件的增强函数
2010/07/21 PHP
奇怪的PHP引用效率问题分析
2012/03/23 PHP
jQuery textarea的长度进行验证
2009/05/06 Javascript
复制js对象方法(详解)
2013/07/08 Javascript
jQuery实现鼠标移到元素上动态提示消息框效果
2013/10/20 Javascript
如何正确使用Nodejs 的 c++ module 链接到 OpenSSL
2014/08/03 NodeJs
jQuery+PHP打造滑动开关效果
2014/12/16 Javascript
jquery实现具有收缩功能的垂直导航菜单
2016/02/16 Javascript
node.js 中国天气预报 简单实现
2016/06/06 Javascript
谈谈JavaScript的New关键字
2016/08/26 Javascript
javascript cookie基础应用之记录用户名的方法
2016/09/20 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
利用JS制作万年历的方法
2017/08/16 Javascript
Angular4 反向代理Details实践
2018/05/30 Javascript
闭包在python中的应用之translate和maketrans用法详解
2014/08/27 Python
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
详解Python的Twisted框架中reactor事件管理器的用法
2016/05/25 Python
python逆向入门教程
2018/01/15 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
scrapy结合selenium解析动态页面的实现
2020/09/28 Python
浅谈css3中calc在less编译时被计算的解决办法
2017/12/04 HTML / CSS
H5仿微信界面教程(一)
2017/07/05 HTML / CSS
美体小铺美国官网:The Body Shop美国
2017/11/10 全球购物
请编程遍历页面上所有 TextBox 控件并给它赋值为 string.Empty
2015/12/03 面试题
大学生个人简历中的自我评价
2013/12/27 职场文书
行政助理的岗位职责
2014/02/18 职场文书
现场施工员岗位职责
2014/03/10 职场文书
颁奖晚会主持词
2014/03/25 职场文书
小学毕业演讲稿
2014/04/25 职场文书
二年级学生期末评语
2014/12/26 职场文书
关于maven依赖 ${xxx.version}报错问题
2022/01/18 Java/Android
我家女友可不止可爱呢 公开OP主题曲无字幕动画MV
2022/04/11 日漫