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的三种$()
Dec 30 Javascript
浅析return false的正确使用
Nov 04 Javascript
浅析js中的浮点型运算问题
Jan 06 Javascript
使用node.js 制作网站前台后台
Nov 13 Javascript
Javascript中With语句用法实例
May 14 Javascript
7个有用的jQuery代码片段分享
May 19 Javascript
ajax如何实现页面局部跳转与结果返回
Aug 24 Javascript
javascript十六进制数字和ASCII字符之间的转换方法
Dec 27 Javascript
基于Angularjs+mybatis实现二级评论系统(仿简书)
Feb 13 Javascript
详解JS中的this、apply、call、bind(经典面试题)
Sep 19 Javascript
微信小程序的授权实现过程解析
Aug 02 Javascript
Vue组件生命周期运行原理解析
Nov 25 Vue.js
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
Ajax+PHP 边学边练 之二 实例
2009/11/24 PHP
php中大括号作用介绍
2012/03/22 PHP
php向js函数传参的几种方法
2014/08/10 PHP
Linux中为php配置伪静态
2014/12/17 PHP
Codeigniter控制器controller继承问题实例分析
2016/01/19 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
初试jQuery EasyUI 使用介绍
2010/04/01 Javascript
用nodejs写的一个简单项目打包工具
2013/05/11 NodeJs
js中replace的用法总结
2013/12/27 Javascript
Javascript连接多个数组不用concat来解决
2014/03/24 Javascript
AngularJS基础学习笔记之表达式
2015/05/10 Javascript
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
利用Three.js如何实现阴影效果实例代码
2017/09/26 Javascript
jQuery实现的网站banner图片无缝轮播效果完整实例
2019/01/28 jQuery
用Electron写个带界面的nodejs爬虫的实现方法
2019/01/29 NodeJs
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
websocket4.0+typescript 实现热更新的方法
2019/08/14 Javascript
layui自定义工具栏的方法
2019/09/19 Javascript
Python的math模块中的常用数学函数整理
2016/02/04 Python
Python 加密的实例详解
2017/10/09 Python
python3实现公众号每日定时发送日报和图片
2018/02/24 Python
VScode编写第一个Python程序HelloWorld步骤
2018/04/06 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
2019/02/21 Python
PyCharm 无法 import pandas 程序卡住的解决方式
2020/03/09 Python
python3.8.3安装教程及环境配置的详细教程(64-bit)
2020/11/28 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
2020/12/09 Python
Bodum官网:咖啡和茶壶、玻璃器皿、厨房电器等
2018/08/01 全球购物
土木工程实习生自我鉴定
2013/09/19 职场文书
网上卖盒饭创业计划书
2014/01/26 职场文书
欢度春节标语
2014/07/01 职场文书
查摆剖析材料范文
2014/09/30 职场文书
自我检讨报告
2015/01/28 职场文书
个性发展自我评价2015
2015/03/09 职场文书
2015秋季幼儿园开学寄语
2015/03/25 职场文书
Python人工智能之混合高斯模型运动目标检测详解分析
2021/11/07 Python
详解Spring Bean的配置方式与实例化
2022/06/10 Java/Android