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 相关文章推荐
ext 代码生成器
Aug 07 Javascript
jQuery之end()和pushStack()使用介绍
Feb 07 Javascript
JQuery Tips相关(1)----关于$.Ready()
Aug 14 Javascript
iframe如何动态创建及释放其所占内存
Sep 03 Javascript
详解JavaScript函数对象
Nov 15 Javascript
JavaScript设计模式之单体模式全面解析
Sep 09 Javascript
jQuery实现的模拟弹出窗口功能示例
Nov 24 Javascript
JS实现仿PS的调色板效果完整实例
Dec 21 Javascript
从源码看angular/material2 中 dialog模块的实现方法
Oct 18 Javascript
vue源码入口文件分析(推荐)
Jan 30 Javascript
微信小程序自定义多选事件的实现代码
May 17 Javascript
vue+element-ui+axios实现图片上传
Aug 20 Javascript
jquery插件实现悬浮的菜单
jquery插件实现代码雨特效
Apr 24 #jQuery
jquery插件实现搜索历史
Apr 24 #jQuery
关于Javascript闭包与应用的详解
vue首次渲染全过程
使用 JavaScript 制作页面效果
Apr 21 #Javascript
一道JS算法面试题——冒泡、选择排序
Apr 21 #Javascript
You might like
如何将一个表单同时提交到两个地方处理
2006/10/09 PHP
浅谈apache和nginx的rewrite的区别
2013/02/22 PHP
thinkphp框架使用JWTtoken的方法详解
2019/10/10 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
mysql输出数据赋给js变量报unterminated string literal错误原因
2010/05/22 Javascript
JavaScript表达式:URL 协议介绍
2013/03/10 Javascript
Javascript 多物体运动的实现
2014/12/24 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
BootStrap Datepicker 插件修改为默认中文的实现方法
2017/02/10 Javascript
JavaScript事件方法(实例讲解)
2017/06/27 Javascript
Node.JS更改Windows注册表Regedit的方法小结
2017/08/18 Javascript
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
vue轻量级框架无法获取到vue对象解决方法
2019/05/12 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
简单实现节流函数和防抖函数过程解析
2019/10/08 Javascript
微信小程序音乐播放器开发
2019/11/20 Javascript
python去除空格和换行符的实现方法(推荐)
2017/01/04 Python
python的Crypto模块实现AES加密实例代码
2018/01/22 Python
pytorch标签转onehot形式实例
2020/01/02 Python
Python Selenium自动化获取页面信息的方法
2020/08/31 Python
PyCharm上安装Package的实现(以pandas为例)
2020/09/18 Python
使用Python判断一个文件是否被占用的方法教程
2020/12/16 Python
深入理解HTML5定时器requestAnimationFrame的使用
2018/12/12 HTML / CSS
便携式太阳能系统的创新者:GOAL ZERO
2018/02/04 全球购物
宏碁西班牙官网:Acer西班牙
2021/01/08 全球购物
普通简短的个人自我评价
2014/02/15 职场文书
《阳光》教学反思
2014/02/23 职场文书
秋冬农业生产标语
2014/10/09 职场文书
干部作风建设工作总结
2014/10/29 职场文书
大学毕业生自我评价
2015/03/02 职场文书
资深HR教你写好简历中的自我评价
2019/05/07 职场文书
Python上下文管理器Content Manager
2021/06/26 Python
把77A收信机改造成收音机
2022/04/05 无线电
Mybatis-Plus 使用 @TableField 自动填充日期
2022/04/26 Java/Android