JavaScript创建防篡改对象的方法分析


Posted in Javascript onDecember 30, 2018

本文实例讲述了JavaScript创建防篡改对象的方法。分享给大家供大家参考,具体如下:

之前的 JavaScript,开发人员可能会意外修改了别人的代码,甚至重写原生对象!现在,在 ECMAScript 5 中可以定义防篡改对象啦O(∩_∩)O~

不过,一旦把对象定义为防篡改之后,就无法撤销了哦。

1 不可扩展对象

默认情况下,所有的对象都是可扩展的,即可以随意地添加属性和方法。现在,使用 Object.preventExtensions(person) 方法后,对象就不可以扩展咯:

<script type="text/javascript">
  var person = {name: "deniro"};
  //  person.age = 29;
  //  console.log(person.age);
  console.log(Object.isExtensible(person));//true
  Object.preventExtensions(person);
  person.age = 15;
  console.log(person.age);//undefined
  console.log(Object.isExtensible(person));//false
</script>

运行结果:

JavaScript创建防篡改对象的方法分析

在非严格模式下,为对象添加新成员会静默失败;而在严格模式下,会抛出错误。

虽然对象不能添加新成员,但仍然可以修改和删除已有的成员。而 Object.isExtensible() 可以确定对象是否可扩展。

2 密封的对象

密封的对象不可以扩展,而且已有的成员的[[Configurable]]的特性也被设置为 false,这意味着不能删除这个对象的属性和方法咯,但属性的值可以修改:

<script type="text/javascript">
  var person = {name: "deniro"};
  console.log(Object.isExtensible(person));//true
  console.log(Object.isSealed(person));//false
  Object.seal(person);//密封对象
  console.log(Object.isExtensible(person));//false
  console.log(Object.isSealed(person));//true
  person.age = 29;
  console.log(person.age);//undefined
  delete person.name;
  console.log(person.name);//deniro
</script>

运行结果:

JavaScript创建防篡改对象的方法分析

跟不可扩展对象相似,在非严格模式下,删除对象的已有成员会静默失败;而在严格模式下,会抛出错误。

3 冻结的对象

对象的最严格的防篡改级别是冻结!冻结的对象既不能扩展,又是密封的,而且对象的数据属性[[Writable]]被设置为 false,即属性值无法被修改:

<script type="text/javascript">
  var person = {name: "deniro"};
  console.log(Object.isExtensible(person));//true
  console.log(Object.isSealed(person));//false
  console.log(Object.isFrozen(person));//false
  Object.freeze(person);
  console.log(Object.isExtensible(person));//false
  console.log(Object.isSealed(person));//true
  console.log(Object.isFrozen(person));//trueo
  person.age = 29;
  console.log(person.age);//undefined
  delete person.name;
  console.log(person.name);//deniro
  person.name = "lily";
  console.log(person.name);//deniro
</script>

运行结果:

JavaScript创建防篡改对象的方法分析

对于 JavaScript 第三方库的而言,冻结对象很有用,因为这些库最怕被人意外修改了呀O(∩_∩)O~

感兴趣的朋友还可以使用本站在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行结果。

更多关于JavaScript相关内容还可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
使用jQuery清空file文件域的解决方案
Apr 12 Javascript
javascript简单实现表格行间隔显示颜色并高亮显示
Nov 29 Javascript
extjs 如何给column 加上提示
Jul 29 Javascript
javascript检查浏览器是否支持flash的实现代码
Aug 14 Javascript
jQuery中parentsUntil()方法用法实例
Jan 07 Javascript
BootStrap创建响应式导航条实例代码
May 31 Javascript
jQuery简单动画变换效果实例分析
Jul 04 Javascript
jQuery实现文章图片弹出放大效果
Apr 06 jQuery
详解webpack babel的配置
Jan 09 Javascript
详解javascript中的babel到底是什么
Jun 21 Javascript
微信小程序 调用远程接口 给全局数组赋值代码实例
Aug 13 Javascript
webpack的tree shaking的实现方法
Sep 18 Javascript
JavaScript事件对象深入详解
Dec 30 #Javascript
JavaScript继承的特性与实践应用深入详解
Dec 30 #Javascript
JavaScript函数的特性与应用实践深入详解
Dec 30 #Javascript
基于Three.js实现360度全景图片
Dec 30 #Javascript
three.js实现圆柱体
Dec 30 #Javascript
three.js实现炫酷的全景3D重力感应
Dec 30 #Javascript
Three.js实现3D机房效果
Dec 30 #Javascript
You might like
咖啡的种类和口感
2021/03/03 新手入门
浅析php过滤html字符串,防止SQL注入的方法
2013/07/02 PHP
PHP防盗链的基本思想 防盗链的设置方法
2015/09/25 PHP
Thinkphp 框架扩展之Widget扩展实现方法分析
2020/04/23 PHP
js loading加载效果实现代码
2009/11/24 Javascript
自定义jQuery选项卡插件实例
2013/03/27 Javascript
nullJavascript中创建对象的五种方法实例
2013/05/07 Javascript
JS 获取浏览器和屏幕宽高等信息代码
2014/03/31 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
WEB前端开发都应知道的jquery小技巧及jquery三个简写
2015/11/15 Javascript
Bootstrap每天必学之导航条(二)
2016/03/01 Javascript
jQuery四种选择器使用及示例
2016/06/05 Javascript
Node.js学习教程之HTTP/2服务器推送【译】
2017/10/31 Javascript
原生JS 实现的input输入时表格过滤操作示例
2019/08/03 Javascript
vue Tab切换以及缓存页面处理的几种方式
2019/11/05 Javascript
详解关于Vue单元测试的几个坑
2020/04/26 Javascript
vue中element 的upload组件发送请求给后端操作
2020/09/07 Javascript
在Mac OS上使用mod_wsgi连接Python与Apache服务器
2015/12/24 Python
Python中操作mysql的pymysql模块详解
2016/09/13 Python
Python网络爬虫项目:内容提取器的定义
2016/10/25 Python
Python下调用Linux的Shell命令的方法
2018/06/12 Python
对python3.4 字符串转16进制的实例详解
2019/06/12 Python
PYQT5设置textEdit自动滚屏的方法
2019/06/14 Python
深入了解Python在HDA中的应用
2019/09/05 Python
python实现超市管理系统(后台管理)
2019/10/25 Python
基于Python数据结构之递归与回溯搜索
2020/02/26 Python
python DES加密与解密及hex输出和bs64格式输出的实现代码
2020/04/13 Python
Python timeit模块原理及使用方法
2020/10/10 Python
Canvas中设置width与height的问题浅析
2018/11/01 HTML / CSS
Ralph Lauren法国官网:美国高品味时装品牌
2017/12/08 全球购物
iHerb俄罗斯:维生素、补品和天然产品
2020/07/09 全球购物
数学专业毕业生自荐信
2013/11/10 职场文书
初中英语教学反思
2014/01/25 职场文书
毕业实习评语
2014/02/10 职场文书
党员群众路线对照检查材料思想汇报
2014/09/17 职场文书
领导班子个人对照检查材料(群众路线)
2014/09/26 职场文书