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 相关文章推荐
JQuery.closest(),parent(),parents()寻找父结点
Feb 17 Javascript
js数组去重的常用方法总结
Jan 24 Javascript
jQuery设置和移除文本框默认值的方法
Mar 09 Javascript
Jquery基础之事件操作详解
Jun 14 Javascript
JavaScript ES6中CLASS的使用详解
Nov 22 Javascript
原生js实现弹出层登录拖拽功能
Dec 05 Javascript
js实现图片左右滚动效果
Feb 27 Javascript
JavaScript实现的搜索及高亮显示功能示例
Aug 14 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
Apr 20 jQuery
node前端开发模板引擎Jade的入门
May 11 Javascript
node中间层实现文件上传功能
Jun 11 Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
Sep 18 Javascript
jquery插件实现悬浮的菜单
jquery插件实现代码雨特效
Apr 24 #jQuery
jquery插件实现搜索历史
Apr 24 #jQuery
关于Javascript闭包与应用的详解
vue首次渲染全过程
使用 JavaScript 制作页面效果
Apr 21 #Javascript
一道JS算法面试题——冒泡、选择排序
Apr 21 #Javascript
You might like
php4的session功能评述(三)
2006/10/09 PHP
CodeIgniter配置之autoload.php自动加载用法分析
2016/01/20 PHP
PHP PDOStatement::getAttribute讲解
2019/02/01 PHP
PHP学习记录之常用的魔术常量详解
2019/12/12 PHP
jquery的Tooltip插件 qtip使用详细说明
2010/09/08 Javascript
js取消单选按钮选中示例代码
2013/11/14 Javascript
Window.Open如何在同一个标签页打开
2014/06/20 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
2015/07/22 Javascript
jquery模拟进度条实现方法
2015/08/03 Javascript
JavaScript中点击事件的写法
2016/06/28 Javascript
getElementById().innerHTML与getElementById().value的区别
2016/10/27 Javascript
JavaScript实现简单图片轮播效果
2017/08/21 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
2018/10/01 Javascript
深入理解使用Vue实现Context-Menu的思考与总结
2019/03/09 Javascript
使用Angular material主题定义自己的组件库的配色体系
2019/09/04 Javascript
解决使用layui对select append元素无效或者未及时更新的问题
2019/09/18 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
2020/03/08 Javascript
解决angular 使用原生拖拽页面卡顿及表单控件输入延迟问题
2020/04/21 Javascript
js实现表格单列按字母排序
2020/08/12 Javascript
vue 验证两次输入的密码是否一致的方法示例
2020/09/29 Javascript
深入理解python函数递归和生成器
2016/06/06 Python
在cmd中运行.py文件: python的操作步骤
2018/05/12 Python
Django框架搭建的简易图书信息网站案例
2019/05/25 Python
numpy数组广播的机制
2019/07/12 Python
使用python写的opencv实时监测和解析二维码和条形码
2019/08/14 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
2020/03/09 Python
浅析CSS3 用text-overflow解决文字排版问题
2020/10/28 HTML / CSS
Canvas 文本转粒子效果的实现代码
2019/02/14 HTML / CSS
澳大利亚足球鞋和服装购物网站:Ultra Football
2018/10/11 全球购物
汽车检测与维修专业求职信
2013/10/30 职场文书
产品质量承诺书
2014/03/27 职场文书
年终考核实施方案
2014/05/26 职场文书
婚礼领导致辞大全
2015/07/28 职场文书
2016秋季运动会前导词
2015/11/25 职场文书
学前班教学反思
2016/02/24 职场文书
使用Python开发冰球小游戏
2022/04/30 Python