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 相关文章推荐
JAVASCRIPT 对象的创建与使用
Mar 09 Javascript
JavaScript 无符号右移赋值操作
Apr 17 Javascript
jqeury eval将字符串转换json的方法
Jan 20 Javascript
javascript 基础篇4 window对象,DOM
Mar 14 Javascript
JavaScript数据结构和算法之二叉树详解
Feb 11 Javascript
7个jQuery最佳实践
Jan 12 Javascript
Three.js学习之Lamber材质和Phong材质
Aug 04 Javascript
基于jQuery制作小图标上下滑动特效
Jan 18 Javascript
Angular2学习教程之TemplateRef和ViewContainerRef详解
May 25 Javascript
jQuery实现web页面樱花坠落的特效
Jun 01 jQuery
JQuery Ajax动态加载Table数据的实例讲解
Aug 09 jQuery
Vue项目中使用jsonp抓取跨域数据的方法
Nov 10 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判断输入不超过mysql的varchar字段的长度范围
2011/06/24 PHP
浅谈PDO的rowCount函数
2015/06/18 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
2017/07/03 PHP
JavaScript静态的动态
2006/09/18 Javascript
IE JS编程需注意的内存释放问题
2009/06/23 Javascript
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
2010/03/05 Javascript
JSQL  一个 web DB 的封装
2010/05/05 Javascript
使用JavaScript 实现各种跨域的方法
2013/05/08 Javascript
js截取固定长度的中英文字符的简单实例
2013/11/22 Javascript
解决window.opener=null;window.close(),只支持IE6不支持IE7,IE8的问题
2014/01/14 Javascript
JavaScript实现N皇后问题算法谜题解答
2014/12/29 Javascript
javascript中createElement的两种创建方式
2015/05/14 Javascript
AngularJS 依赖注入详解和简单实例
2016/07/28 Javascript
javascript鼠标滑过显示二级菜单特效
2020/11/18 Javascript
微信小程序 swiper组件详解及实例代码
2016/10/25 Javascript
Vue.js实现表格动态增加删除的方法(附源码下载)
2017/01/20 Javascript
AngularJS 霸道的过滤器小结
2017/04/26 Javascript
详解小程序原生使用ES7 async/await语法
2018/08/06 Javascript
vue draggable resizable 实现可拖拽缩放的组件功能
2019/07/15 Javascript
vue data恢复初始化数据的实现方法
2019/10/31 Javascript
微信公众号H5之微信分享常见错误和问题(小结)
2019/11/14 Javascript
解决vux 中popup 组件Mask 遮罩在最上层的问题
2020/11/03 Javascript
[40:04]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
SVM基本概念及Python实现代码
2017/12/27 Python
浅谈Python2获取中文文件名的编码问题
2018/01/09 Python
Python多进程池 multiprocessing Pool用法示例
2018/09/07 Python
python统计字符串中字母出现次数代码实例
2020/03/02 Python
Jupyter打开图形界面并画出正弦函数图像实例
2020/04/24 Python
pandas参数设置的实用小技巧
2020/08/23 Python
python线程优先级队列知识点总结
2021/02/28 Python
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
2013/02/04 HTML / CSS
关于母亲节的感言
2014/02/04 职场文书
优秀大学生职业生涯规划书
2014/02/27 职场文书
活动总结的格式
2014/05/07 职场文书
化工工艺设计求职信
2014/06/25 职场文书
教你使用RustDesk 搭建一个自己的远程桌面中继服务器
2022/08/14 Servers