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 change,propertychange,input事件小议
Dec 20 Javascript
javascript利用apply和arguments复用方法
Nov 25 Javascript
jQuery左侧大图右侧小图焦点图幻灯切换代码分享
Aug 19 Javascript
jquery获取文档高度和窗口高度汇总
Jan 25 Javascript
JavaScript函数节流概念与用法实例详解
Jun 20 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
Oct 10 Javascript
Bootstrap源码解读按钮(5)
Dec 23 Javascript
详解基于DllPlugin和DllReferencePlugin的webpack构建优化
Jun 28 Javascript
小程序绑定用户方案优化小结
May 15 Javascript
微信小程序基于高德地图查找位置并显示文字
Oct 30 Javascript
vue实现浏览器全屏展示功能
Nov 27 Javascript
JavaScript字符串转数字的简单实现方法
Nov 27 Javascript
jquery插件实现悬浮的菜单
jquery插件实现代码雨特效
Apr 24 #jQuery
jquery插件实现搜索历史
Apr 24 #jQuery
关于Javascript闭包与应用的详解
vue首次渲染全过程
使用 JavaScript 制作页面效果
Apr 21 #Javascript
一道JS算法面试题——冒泡、选择排序
Apr 21 #Javascript
You might like
自己前几天写的无限分类类
2007/02/14 PHP
php ob_flush,flush在ie中缓冲无效的解决方法
2010/05/09 PHP
phpMyAdmin 链接表的附加功能尚未激活的问题
2010/08/01 PHP
PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
2013/02/14 PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
2014/09/10 PHP
Yii使用Captcha验证码的方法
2015/12/28 PHP
PHP实现QQ登录实例代码
2016/01/14 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
2016/11/08 PHP
yii2使用GridView实现数据全选及批量删除按钮示例
2017/03/01 PHP
JS判断元素为数字的奇异写法分享
2012/08/01 Javascript
JavaScript+CSS控制打印格式示例介绍
2014/01/07 Javascript
jquery跟js初始化加载的多种方法及区别介绍
2014/04/02 Javascript
javascript实现3D切换焦点图
2015/10/16 Javascript
JS 清除字符串数组中,重复元素的实现方法
2016/05/24 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
2017/05/11 Javascript
浅谈node模块与npm包管理工具
2018/01/03 Javascript
10个经典的网页鼠标特效代码
2018/01/09 Javascript
python学习笔记:字典的使用示例详解
2014/06/13 Python
Python中super关键字用法实例分析
2015/05/28 Python
Python函数的周期性执行实现方法
2016/08/13 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
2017/07/13 Python
Python使用文件锁实现进程间同步功能【基于fcntl模块】
2017/10/16 Python
浅析python中的迭代与迭代对象
2018/10/08 Python
Django 反向生成url实例详解
2019/07/30 Python
keras tensorflow 实现在python下多进程运行
2020/02/06 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
Python matplotlib可视化实例解析
2020/06/01 Python
python设置表格边框的具体方法
2020/07/17 Python
欧缇丽美国官网:Caudalie美国
2016/12/31 全球购物
入团者的自我评价分享
2013/12/02 职场文书
人事档案接收函
2014/01/12 职场文书
环保建议书作文
2014/03/12 职场文书
赡养老人协议书
2014/04/21 职场文书
2014年驻村干部工作总结
2014/11/17 职场文书
财务会计岗位职责
2015/02/03 职场文书
2015年端午节活动方案
2015/05/05 职场文书