JavaScript 防篡改对象的用法示例


Posted in Javascript onApril 24, 2021

javascript防篡改对象

这个东西吧,用到的很少,个人感觉用处不大,但是,可以作为装逼的利器,哈哈,开搞。。

1、不可扩展对象

默认情况下对象都是可以扩展的,也就是说,任何时候都可以向对象中添加属性和方法。现在使用Object.preventExtensions(object)方法可以改变这个行为,让你不能再给对象添加属性和方法。例如:

var person={name : 'jack'};
Object.preventExtensions(person);
person.age=13;
console.log(person.age);///undefine

虽然不能给对象添加新成员,但是已有的成员则丝毫不受影响,你仍然可以修改和删除自己的已有的成员。另外使用isExtensible()方法还可以确定对象是否可以扩展。例如:

var person={name : 'jack'};
alert(Object.isExtensible(person));//true

Object.preventExtensions(person);
alert(Object.istExtensible(person));//false

2、密封的对象

ECMAScript 5 为对象定义的第二个保护级别是密封对象。使用Object.seal(object)方法可以将对象改为密封对象。密封对象不可扩展,而且已有成员的[[configurable]]特性将被设置为false。这就意味着不能删除属性和方法,因为不能使用Object.defineProperty()把数据修改为访问其属性,或者相反。但是属性值是可以修改的。

var person = {name:'tom'};
Object.seal(person);
person.age=12;
console.log(person.age);//undefine

delete person.name;
console.log(person.name);//tom

person.name="jack";
alert(person.name);//jack

使用Object.isSealed()方法可以确定对象是否被密封了,因为被密封的对象也是不可扩展的,所以使用Object.istExtensible()检测密封对象也会返回false(即不可扩展)

var person = {name:'tom'};
alert(Object.isExtensible(person));///true,可扩展
alert(Object.isSealed(person));////false,未加密
               
Object.seal(person);
alert(Object.isExtensible(person));///false,不可扩展
alert(Object.isSealed(person));////true,已经加密

3、冻结的对象

最严格的的防止篡改级别的是冻结对象,冻结的对象既不可扩展,又是密封的,而且对象的数据属性的[[Writable]]特性会被设置为false,如果定义set函数,访问器属性仍然是可写的,现在使用Object.freeze(object)方法可以将对象改为冻结的对象。

var person={name : 'tony'};
Object.freeze(person);
person.age=12;
alert(person.age);//undefine

delete person.name;
alert(person.name);//tony

person.name = 'jack';
alert(person.name);//tony

使用Object.isFrozen()方法可以检测对象是否是冻结对象,因为冻结对象既是不可扩展对象,又是密封的对象,所以用isExtensible()
和Object.istExtensible()检测冻结对象将分别返回false和true,

var person = {name:'tom'};
alert(Object.isExtensible(person));///true,可扩展
alert(Object.isSealed(person));////false,未加密
alert(Object.isFrozen(person));////false,未加密
               
Object.seal(person);
alert(Object.isExtensible(person));///false,不可扩展
alert(Object.isSealed(person));////true,已经加密
alert(Object.isFrozen(person));////true,已经冻结

以上就是JavaScript 防篡改对象的用法示例的详细内容,更多关于JavaScript 防篡改对象的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
用js查找法实现当前栏目的高亮显示的代码
Nov 24 Javascript
谷歌浏览器 insertCell与appendChild的区别
Feb 12 Javascript
JavaScript 对象模型 执行模型
Oct 15 Javascript
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
Feb 27 Javascript
javascript实现滑动解锁功能
Dec 31 Javascript
javascript图片滑动效果实现
Jan 28 Javascript
jquery动态增加删减表格行特效
Nov 20 Javascript
jQuery EasyUI基础教程之EasyUI常用组件(推荐)
Jul 15 Javascript
深入理解Angular2 模板语法
Aug 07 Javascript
js防阻塞加载的实现方法
Sep 09 Javascript
令按钮悬浮在(手机)页面底部的实现方法
May 02 Javascript
jQuery实现聊天对话框
Feb 08 jQuery
jquery插件实现悬浮的菜单
jquery插件实现代码雨特效
Apr 24 #jQuery
jquery插件实现搜索历史
Apr 24 #jQuery
关于Javascript闭包与应用的详解
vue首次渲染全过程
使用 JavaScript 制作页面效果
Apr 21 #Javascript
一道JS算法面试题——冒泡、选择排序
Apr 21 #Javascript
You might like
Zerg剧情介绍
2020/03/14 星际争霸
用PHP的ob_start() 控制您的浏览器cache
2009/08/03 PHP
Mysql中分页查询的两个解决方法比较
2013/05/02 PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
2014/03/08 PHP
PHP函数checkdnsrr用法详解(Windows平台用法)
2016/03/21 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
javascript让setInteval里的函数参数中的this指向特定的对象
2010/01/31 Javascript
jQuery源码中的chunker 正则过滤符分析
2012/07/31 Javascript
使用GruntJS构建Web程序之合并压缩篇
2014/06/06 Javascript
常用jQuery选择器总结
2014/07/11 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
Augularjs-起步详解
2016/07/08 Javascript
Bootstrap Validator 表单验证
2016/07/25 Javascript
Bootstrap3 datetimepicker控件使用实例
2016/12/13 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
jQuery读取本地的json文件(实例讲解)
2017/10/31 jQuery
JQuery 又谈ajax局部刷新
2017/11/27 jQuery
javaScript中"=="和"==="的区别详解
2018/03/16 Javascript
vue 组件中添加样式不生效的解决方法
2018/07/06 Javascript
NodeJs入门教程之定时器和队列
2019/03/08 NodeJs
vue给对象动态添加属性和值的实例
2019/09/09 Javascript
原生js实现的金山打字小游戏(实例代码详解)
2020/03/16 Javascript
Node.js API详解之 Error模块用法实例分析
2020/05/14 Javascript
微信小程序用户登录和登录态维护的实现
2020/12/10 Javascript
Python基于socket模块实现UDP通信功能示例
2018/04/10 Python
python判断输入日期为第几天的实例
2018/11/13 Python
Python3自动签到 定时任务 判断节假日的实例
2018/11/13 Python
python list多级排序知识点总结
2019/10/23 Python
Python爬虫爬取煎蛋网图片代码实例
2019/12/16 Python
html5 利用canvas手写签名并保存的实现方法
2018/07/12 HTML / CSS
法国时尚品牌乐都特瑞士站:La Redoute瑞士
2016/09/05 全球购物
Sasa莎莎海外旗舰店:香港莎莎美妆平台
2018/03/21 全球购物
ManoMano英国:欧洲第一家专注于DIY和园艺市场的电商平台
2020/03/12 全球购物
小学生暑假家长评语
2014/04/17 职场文书
从贫穷到富有,是知识技能和学习力的差别
2019/08/20 职场文书