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 相关文章推荐
javascript读写XML实现广告轮换(兼容IE、FF)
Aug 09 Javascript
javascript中的括号()用法小结
Apr 14 Javascript
jquery原理以及学习技巧介绍
Nov 11 Javascript
javascript每日必学之运算符
Feb 16 Javascript
详解JavaScript正则表达式之分组匹配及反向引用
Mar 09 Javascript
学习vue.js中class与style绑定
Dec 03 Javascript
JS HTML图片显示Canvas 压缩功能
Jul 21 Javascript
纯js封装的ajax功能函数与用法示例
May 14 Javascript
Angular PWA使用的Demo示例
Jan 31 Javascript
bootstrap-table formatter 使用vue组件的方法
May 09 Javascript
基于js实现数组相邻元素上移下移
May 19 Javascript
JavaScript实时更新当前的时间的示例代码
Jul 15 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
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
2016/08/12 PHP
替换php字符串中的单引号为双引号的方法
2017/02/16 PHP
PHP封装的分页类与简单用法示例
2019/02/25 PHP
解决IE下select标签innerHTML插入option的BUG(兼容IE,FF,Opera,Chrome,Safari)
2010/05/13 Javascript
简单的jquery拖拽排序效果实现代码
2011/09/20 Javascript
jquery 实现二级/三级/多级联动菜单的思路及代码
2013/04/08 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
javascript实现的字符串与十六进制表示字符串相互转换方法
2015/07/17 Javascript
纯js实现隔行变色效果
2017/11/29 Javascript
移动web开发之touch事件实例详解
2018/01/17 Javascript
vue短信验证性能优化如何写入localstorage中
2018/04/25 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
2019/01/27 Javascript
Electron 如何调用本地模块的方法
2019/02/01 Javascript
Nodejs异步流程框架async的方法
2019/06/07 NodeJs
node.js实现带进度条的多文件上传
2020/03/27 Javascript
vue+axios实现post文件下载
2019/09/25 Javascript
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
vue下拉刷新组件的开发及slot的使用详解
2020/12/23 Vue.js
python进阶教程之循环相关函数range、enumerate、zip
2014/08/30 Python
利用Python的Django框架中的ORM建立查询API
2015/04/20 Python
python 获取网页编码方式实现代码
2017/03/11 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
2020/02/25 Python
python计算Content-MD5并获取文件的Content-MD5值方式
2020/04/03 Python
python如何快速生成时间戳
2020/07/21 Python
详解html5 postMessage解决跨域通信的问题
2018/08/17 HTML / CSS
泰海淘:泰国king Power王权免税集团旗下跨境海淘综合型电商
2020/07/26 全球购物
Nobody Denim官网:购买高级女士牛仔裤
2021/03/15 全球购物
机械设计职业生涯规划书
2013/12/27 职场文书
狼和鹿教学反思
2014/02/05 职场文书
《我的第一本书》教学反思
2014/02/15 职场文书
《孙权劝学》教学反思
2014/04/23 职场文书
材料员岗位职责范本
2015/04/11 职场文书
《玩出了名堂》教学反思
2016/02/17 职场文书
管理者们如何制定2019年的工作计划?
2019/07/01 职场文书
Go 语言下基于Redis分布式锁的实现方式
2021/06/28 Golang
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle