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版本A*寻路算法
Dec 22 Javascript
PNG背景在不同浏览器下的应用
Jun 22 Javascript
js文件中调用js的实现方法小结
Oct 23 Javascript
javascript 常用验证函数总结
Jun 28 Javascript
AngularJS中的promise用法分析
May 19 Javascript
详解vue2.0 不同屏幕适配及px与rem转换问题
Feb 23 Javascript
浅谈Angularjs中不同类型的双向数据绑定
Jul 16 Javascript
jQuery实现动态生成年月日级联下拉列表示例
May 11 jQuery
vue实现简单的日历效果
Sep 24 Javascript
vue 开发企业微信整合案例分析
Dec 02 Javascript
jquery将信息遍历到界面上实例代码
Jan 21 jQuery
vue中使用vue-print.js实现多页打印
Mar 05 Javascript
jquery插件实现悬浮的菜单
jquery插件实现代码雨特效
Apr 24 #jQuery
jquery插件实现搜索历史
Apr 24 #jQuery
关于Javascript闭包与应用的详解
vue首次渲染全过程
使用 JavaScript 制作页面效果
Apr 21 #Javascript
一道JS算法面试题——冒泡、选择排序
Apr 21 #Javascript
You might like
很温暖很温暖的Lester Young
2021/03/03 冲泡冲煮
CSS+JS构建的图片查看器
2006/07/22 Javascript
javascript 计算两个整数的百分比值
2009/12/26 Javascript
写JQuery插件的基本知识
2013/11/25 Javascript
js加载读取内容及显示与隐藏div示例
2014/02/13 Javascript
JQuery中serialize() 序列化
2015/03/13 Javascript
Nodejs学习笔记之入门篇
2015/04/16 NodeJs
轻松实现Bootstrap图片轮播
2020/04/20 Javascript
深入分析Javascript事件代理
2016/01/30 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
Node.js常用工具之util模块
2017/03/09 Javascript
详解用vue.js和laravel实现微信支付
2017/06/23 Javascript
Vue中UI组件库之Vuex与虚拟服务器初识
2019/05/07 Javascript
基于Fixed定位的框选功能的实现代码
2019/05/13 Javascript
产制造追溯系统之通过微信小程序实现移动端报表平台
2019/06/03 Javascript
python Django连接MySQL数据库做增删改查
2013/11/07 Python
Python脚本实现网卡流量监控
2015/02/14 Python
Python中返回字典键的值的values()方法使用
2015/05/22 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
2018/07/09 Python
python控制nao机器人身体动作实例详解
2019/04/29 Python
浅谈python 中的 type(), dtype(), astype()的区别
2020/04/09 Python
python编写扎金花小程序的实例代码
2021/02/23 Python
写出程序把一个链表中的接点顺序倒排
2014/04/28 面试题
中学生自我评价范文
2014/02/08 职场文书
我与祖国共奋进演讲稿
2014/09/13 职场文书
群众路线剖析材料怎么写
2014/10/09 职场文书
信访工作个人总结
2015/03/03 职场文书
建筑工程材料员岗位职责
2015/04/11 职场文书
2015年公司工作总结
2015/04/25 职场文书
校园之声广播稿
2015/08/18 职场文书
2016班级元旦联欢会开幕词
2016/03/04 职场文书
Redis 彻底禁用RDB持久化操作
2021/07/09 Redis
python基础之类方法和静态方法
2021/10/24 Python
golang生成vcf通讯录格式文件详情
2022/03/25 Golang
联想win10摄像头打不开怎么办?win10笔记本摄像头打不开解决办法
2022/04/08 数码科技
MySql如何将查询的出来的字段进行转换
2022/06/14 MySQL