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 相关文章推荐
如何实现浏览器上的右键菜单
Jul 10 Javascript
用apply让javascript函数仅执行一次的代码
Jun 27 Javascript
改善用户体验的五款jQuery插件分享
May 22 Javascript
js实现iframe跨页面调用函数的方法
Dec 13 Javascript
javascript解决IE6下hover问题的方法
Jul 28 Javascript
javascript:void(0)点击登录没反应怎么解决
Nov 13 Javascript
jQuery+CSS实现滑动的标签分栏切换效果
Dec 17 Javascript
JS小数转换为整数的方法分析
Jan 07 Javascript
Bootstrap栅格系统简单实现代码
Mar 06 Javascript
node.js爬取中关村的在线电瓶车信息
Nov 13 Javascript
jQuery选择器选中最后一个元素,倒数第二个元素操作示例
Dec 10 jQuery
js get和post请求实现代码解析
Feb 06 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 身份证号验证函数
2009/05/07 PHP
调整优化您的LAMP应用程序的5种简单方法
2011/06/26 PHP
PHP判断远程url是否有效的几种方法小结
2011/10/08 PHP
PHP中文件缓存转内存缓存的方法
2011/12/06 PHP
探讨php中header的用法详解
2013/06/07 PHP
支持中文的PHP按字符串长度分割成数组代码
2015/05/17 PHP
php通过淘宝API查询IP地址归属等信息
2015/12/25 PHP
PHP实现二维数组按某列进行排序的方法
2016/11/18 PHP
PHP小白必须要知道的php基础知识(超实用)
2017/10/10 PHP
window.addEventListener来解决让一个js事件执行多个函数
2012/12/26 Javascript
JavaScript中的Object对象学习教程
2016/05/20 Javascript
基于Vue2的移动端开发环境搭建详解
2016/11/03 Javascript
浅谈javascript alert和confirm的美化
2016/12/15 Javascript
纯原生js实现table表格的增删
2017/01/05 Javascript
JS中关于正则的巧妙操作
2017/08/31 Javascript
javaScript动态添加Li元素的实例
2018/02/24 Javascript
jQuery Ajax实现Select多级关联动态绑定数据的实例代码
2018/10/26 jQuery
javascript的hashCode函数实现代码小结
2020/08/11 Javascript
在服务器端实现无间断部署Python应用的教程
2015/04/16 Python
Python连接MySQL并使用fetchall()方法过滤特殊字符
2016/03/13 Python
python 根据正则表达式提取指定的内容实例详解
2016/12/04 Python
Python 正则表达式匹配字符串中的http链接方法
2018/12/25 Python
使用Python求解带约束的最优化问题详解
2020/02/11 Python
Python爬虫之App爬虫视频下载的实现
2020/12/08 Python
一篇文章带你学习CSS3图片边框
2020/11/04 HTML / CSS
Html5如何唤起百度地图App的方法
2019/01/27 HTML / CSS
html5-Canvas可以在web中绘制各种图形
2012/12/26 HTML / CSS
HTML5实现预览本地图片
2016/02/17 HTML / CSS
Zavvi荷兰:英国大型音像制品和图书游戏零售商
2018/03/22 全球购物
狗狗玩具、零食和咀嚼物的月度送货服务:Super Chewer
2018/08/22 全球购物
创建文明城市标语
2014/06/16 职场文书
房屋租赁协议书
2014/10/18 职场文书
运动会100米加油稿
2015/07/21 职场文书
Vue.js中v-for指令的用法介绍
2022/03/13 Vue.js
Kubernetes关键组件与结构组成介绍
2022/03/31 Servers
为什么MySQL8新特性会修改自增主键属性
2022/04/18 MySQL