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 相关文章推荐
javascript Array对象基础知识小结
Nov 16 Javascript
JavaScript 高级篇之闭包、模拟类,继承(五)
Apr 07 Javascript
js弹出层(jQuery插件形式附带reLoad功能)
Apr 12 Javascript
jQuery实现商品活动倒计时
Oct 16 Javascript
js获取腾讯视频ID的方法
Oct 03 Javascript
详解vue中使用express+fetch获取本地json文件
Oct 10 Javascript
Bootstrap实现翻页效果
Nov 27 Javascript
浅谈vuejs实现数据驱动视图原理
Feb 23 Javascript
使用vue-cli打包过程中的步骤以及问题的解决
May 08 Javascript
ES6 中可以提升幸福度的小功能
Aug 06 Javascript
微信小程序整个页面的自动适应布局的实现
Jul 12 Javascript
JS实现斐波那契数列的五种方式(小结)
Sep 09 Javascript
jquery插件实现悬浮的菜单
jquery插件实现代码雨特效
Apr 24 #jQuery
jquery插件实现搜索历史
Apr 24 #jQuery
关于Javascript闭包与应用的详解
vue首次渲染全过程
使用 JavaScript 制作页面效果
Apr 21 #Javascript
一道JS算法面试题——冒泡、选择排序
Apr 21 #Javascript
You might like
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
2013/04/22 PHP
PHP设计模式之命令模式的深入解析
2013/06/13 PHP
PHP、Nginx、Apache中禁止网页被iframe引用的方法
2020/10/01 PHP
WAMP环境中扩展oracle函数库(oci)
2015/06/26 PHP
YII Framework框架教程之日志用法详解
2016/03/14 PHP
PHP数组操作简单案例分析
2016/10/15 PHP
laravel withCount 统计关联数量的方法
2019/10/10 PHP
Javascript中的数学函数
2007/04/04 Javascript
基于jQuery架构javascript基础体系
2011/01/01 Javascript
JS实现的省份级联实例代码
2013/06/24 Javascript
使用GruntJS构建Web程序之Tasks(任务)篇
2014/06/06 Javascript
浅谈JavaScript中定义变量时有无var声明的区别
2014/08/18 Javascript
nodejs调用cmd命令实现复制目录
2015/05/04 NodeJs
javascript self对象使用详解
2016/10/18 Javascript
Bootstrap的基本应用要点浅析
2016/12/19 Javascript
node.js与C语言 实现遍历文件夹下最大的文件,并输出路径,大小
2017/01/20 Javascript
BootStrapValidator初使用教程详解
2017/02/10 Javascript
浅谈Vue.js
2017/03/02 Javascript
vue实现全选、反选功能
2020/11/17 Javascript
详解vue2.0监听属性的使用心得及搭配计算属性的使用
2018/07/18 Javascript
详解ES6 Promise的生命周期和创建
2019/08/18 Javascript
vue简单封装axios插件和接口的统一管理操作示例
2020/02/02 Javascript
Python基于正则表达式实现检查文件内容的方法【文件检索】
2017/08/30 Python
python递归打印某个目录的内容(实例讲解)
2017/08/30 Python
用Python实现KNN分类算法
2017/12/22 Python
Python File readlines() 使用方法
2018/03/19 Python
python控制nao机器人身体动作实例详解
2019/04/29 Python
pycharm快捷键汇总
2020/02/14 Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
2020/02/26 Python
使用keras实现Precise, Recall, F1-socre方式
2020/06/15 Python
新加坡领先的时尚生活方式零售品牌:CHARLES & KEITH
2018/01/16 全球购物
大学军训感言300字
2014/03/09 职场文书
党员民主生活会整改措施
2014/09/26 职场文书
初中优秀学生评语
2014/12/29 职场文书
项目投资意向书范本
2015/05/09 职场文书
element tree树形组件回显数据问题解决
2022/08/14 Javascript