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 26 Javascript
JavaScript 利用Cookie记录用户登录信息
Dec 08 Javascript
jquery中ajax学习笔记3
Oct 16 Javascript
每天一篇javascript学习小结(String对象)
Nov 18 Javascript
JS定义类的六种方式详解
May 12 Javascript
细数JavaScript 一个等号,两个等号,三个等号的区别
Oct 09 Javascript
BootStrap Table前台和后台分页对JSON格式的要求
Jun 28 Javascript
vue2单元测试环境搭建
May 24 Javascript
vuejs选中当前样式active的实例
Aug 22 Javascript
js中对象和面向对象与Json介绍
Jan 21 Javascript
微信小程序实现手势滑动卡片效果
Aug 26 Javascript
利用js实现简易红绿灯
Oct 15 Javascript
jquery插件实现悬浮的菜单
jquery插件实现代码雨特效
Apr 24 #jQuery
jquery插件实现搜索历史
Apr 24 #jQuery
关于Javascript闭包与应用的详解
vue首次渲染全过程
使用 JavaScript 制作页面效果
Apr 21 #Javascript
一道JS算法面试题——冒泡、选择排序
Apr 21 #Javascript
You might like
收听短波不可能有声音清晰的品质吗
2021/03/01 无线电
透析PHP的配置文件php.ini
2006/10/09 PHP
php根据isbn书号查询amazon网站上的图书信息的示例
2014/02/13 PHP
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
2014/06/21 Servers
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
一个JavaScript继承的实现
2006/10/24 Javascript
HTML 自动伸缩的表格Table js实现
2009/04/01 Javascript
javascript 不间断的图片滚动并可点击
2010/01/15 Javascript
Javascript读取cookie函数代码
2010/10/16 Javascript
js 使用form表单select类实现级联菜单效果
2012/12/19 Javascript
解析使用js判断只能输入数字、字母等验证的方法(总结)
2013/05/14 Javascript
javascript 数组排序函数sort和reverse使用介绍
2013/11/21 Javascript
Google (Local) Search API的简单使用介绍
2013/11/28 Javascript
jQuery实现的倒计时效果实例小结
2016/04/16 Javascript
ES6中Proxy与Reflect实现重载(overload)的方法
2017/03/30 Javascript
Vue2.0 实现移动端图片上传功能
2018/05/30 Javascript
JS实现面向对象继承的5种方式分析
2018/07/21 Javascript
在vue中使用eslint,配合vscode的操作
2020/11/09 Javascript
Python 冒泡,选择,插入排序使用实例
2015/02/05 Python
Django实现图片文字同时提交的方法
2015/05/26 Python
Python的爬虫程序编写框架Scrapy入门学习教程
2016/07/02 Python
django 常用orm操作详解
2017/09/13 Python
Python 中字符串拼接的多种方法
2018/07/30 Python
在Pycharm中项目解释器与环境变量的设置方法
2018/10/29 Python
新手入门Python编程的8个实用建议
2019/07/12 Python
给大家整理了19个pythonic的编程习惯(小结)
2019/09/25 Python
Python3将ipa包中的文件按大小排序
2020/04/17 Python
CSS3截取字符串实例代码【推荐】
2018/06/07 HTML / CSS
怎样声明子类
2013/07/02 面试题
如何查找和删除数据库中的重复数据
2014/11/05 面试题
银行自荐信范文
2013/10/07 职场文书
村党支部书记承诺书
2014/05/29 职场文书
房贷工资证明范本
2015/06/12 职场文书
企业愿景口号
2015/12/25 职场文书
会议开幕致辞怎么写
2016/03/03 职场文书
SQLServer权限之只开启创建表权限
2022/04/12 SQL Server