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 css函数用法(判断标签是否拥有某属性)
May 28 Javascript
JavaScript 匿名函数和闭包介绍
Apr 13 Javascript
JS实现的自定义网页拖动类
Nov 06 Javascript
JavaScript笔记之数据属性和存储器属性
Mar 31 Javascript
AngularJS双向绑定和依赖反转实例详解
Apr 15 Javascript
JavaScript条件判断_动力节点Java学院整理
Jun 26 Javascript
实现单层json按照key字母顺序排序的示例
Dec 06 Javascript
jQuery实现的简单获取索引功能示例
Jun 04 jQuery
vue-cli3 从搭建到优化的详细步骤
Jan 20 Javascript
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
Mar 29 Javascript
JS实现页面数据懒加载
Feb 13 Javascript
React冒泡和阻止冒泡的应用详解
Aug 18 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
风格模板初级不完全修改教程
2006/10/09 PHP
php入门学习知识点三 PHP上传
2011/07/14 PHP
destoon供应信息title调用出公司名称的方法
2014/08/22 PHP
利用ajax和PHP实现简单的流程管理
2017/03/23 PHP
PHP+MySQL实现模糊查询员工信息功能示例
2018/06/01 PHP
总结PHP中初始化空数组的最佳方法
2019/02/13 PHP
PHP FileSystem 文件系统常用api整理总结
2019/07/12 PHP
关于laravel 子查询 &amp; join的使用
2019/10/16 PHP
jquery查找父元素、子元素(个人经验总结)
2014/04/09 Javascript
jQuery中选择器的基础使用教程
2016/05/23 Javascript
mvc中form表单提交的三种方式(推荐)
2016/08/10 Javascript
Bootstrap对话框使用实例讲解
2016/09/24 Javascript
jquery编写日期选择器
2017/03/16 Javascript
打通前后端构建一个Vue+Express的开发环境
2018/07/17 Javascript
详解ES6 系列之异步处理实战
2018/10/26 Javascript
Angular6项目打包优化的实现方法
2019/12/15 Javascript
详细分析JavaScript中的深浅拷贝
2020/09/17 Javascript
antd日期选择器禁止选择当天之前的时间操作
2020/10/29 Javascript
python文件的md5加密方法
2016/04/06 Python
Python tornado队列示例-一个并发web爬虫代码分享
2018/01/09 Python
python把数组中的数字每行打印3个并保存在文档中的方法
2018/07/17 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
2019/06/27 Python
计算机专业个人求职信范例
2013/09/23 职场文书
个人实用简单的自我评价
2013/10/19 职场文书
建筑工程毕业生自我鉴定
2014/01/14 职场文书
优秀体育委员自荐书
2014/01/31 职场文书
土建专业大学生自荐信范文
2014/04/09 职场文书
小学感恩教育活动总结
2014/07/07 职场文书
年检委托书
2014/08/30 职场文书
2014年中学生检讨书大全
2014/10/09 职场文书
2015年党风廉政建设目标责任书
2015/05/08 职场文书
毕业证明书
2015/06/19 职场文书
工程进度款催款函
2015/06/24 职场文书
深度学习详解之初试机器学习
2021/04/14 Python
苹果可能正在打击不进行更新的 App
2022/04/24 数码科技