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学习笔记(五) Array 数组类型介绍
Jun 19 Javascript
bootstrap手风琴制作方法详解
Jan 11 Javascript
JS实现unicode和UTF-8之间的互相转换互转
Jul 05 Javascript
AngularJS监听ng-repeat渲染完成的方法
Mar 20 Javascript
微信小程序实现自上而下字幕滚动
Jul 14 Javascript
解决webpack dev-server不能匹配post请求的问题
Aug 24 Javascript
使用vue2实现带地区编号和名称的省市县三级联动效果
Nov 05 Javascript
10个最受欢迎的 JavaScript框架(推荐)
Apr 24 Javascript
javascript中的this作用域详解
Jul 15 Javascript
微信小程序wx.navigateTo方法里的events参数使用详情及场景
Jan 07 Javascript
解决React在安装antd之后出现的Can't resolve './locale'问题(推荐)
May 03 Javascript
vue移动端下拉刷新和上滑加载
Oct 27 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递归调用数组值并用其执行指定函数的方法
2015/04/01 PHP
PHP抓取网页、解析HTML常用的方法总结
2015/07/01 PHP
Javascript 复制数组实现代码
2009/11/26 Javascript
JavaScript的类型转换(字符转数字 数字转字符)
2010/08/30 Javascript
JQUBAR1.1 jQuery 柱状图插件发布
2010/11/28 Javascript
jQuery EasyUI API 中文文档 - Draggable 可拖拽
2011/09/29 Javascript
js 获取、清空input type=&quot;file&quot;的值(示例代码)
2013/12/24 Javascript
jQuery函数的第二个参数获取指定上下文中的DOM元素
2014/05/19 Javascript
分享JS代码实现鼠标放在输入框上输入框和图片同时更换样式
2016/09/01 Javascript
Angular 应用技巧总结
2016/09/14 Javascript
详细总结Javascript中的焦点管理
2016/09/17 Javascript
js实现选项卡内容切换以及折叠和展开效果【推荐】
2017/01/08 Javascript
Bootstrap3下拉菜单的实现
2017/02/22 Javascript
利用forever和pm2部署node.js项目过程
2017/05/10 Javascript
JS实现简易的图片拖拽排序实例代码
2017/06/09 Javascript
vue-cli + sass 的正确打开方式图文详解
2017/10/27 Javascript
vue实现的仿淘宝购物车功能详解
2019/01/27 Javascript
vue获取data数据改变前后的值方法
2019/11/07 Javascript
Python及Django框架生成二维码的方法分析
2018/01/31 Python
Windows下安装Django框架的方法简明教程
2018/03/28 Python
Tensorflow的梯度异步更新示例
2020/01/23 Python
Python Selenium安装及环境配置的实现
2020/03/17 Python
python使用opencv resize图像不进行插值的操作
2020/07/05 Python
Python爬取梨视频的示例
2021/01/29 Python
用CSS3实现背景渐变的方法
2015/07/14 HTML / CSS
CSS3的first-child选择器实战攻略
2016/04/28 HTML / CSS
大学毕业生通用自荐信范文
2013/10/31 职场文书
同学聚会欢迎辞
2014/01/14 职场文书
公司薪酬管理制度
2014/01/31 职场文书
大学生暑期实践感言
2014/02/26 职场文书
2014年数学教师工作总结
2014/12/03 职场文书
小时代观后感
2015/06/10 职场文书
《迟到》教学反思
2016/02/24 职场文书
简单了解 MySQL 中相关的锁
2021/05/25 MySQL
Tomcat 与 maven 的安装与使用教程
2022/06/16 Servers
MySQL分布式恢复进阶
2022/07/23 MySQL