JS关于对象的安全性之扩展,密封,冻结
来源:互联网 发布:淘宝 实木写字台图片 编辑:程序博客网 时间:2024/04/28 07:10
有时候我们写了一个js库,里面有一些核心对象,我们希望在开发过程中这个核心对象不被修改,这时候就要防止该对象被篡改。Object上有三个方法可以使用
1.Object.preventExtensions(obj);
var bar={"name":"kasol","age":25};Object.preventExtensions(bar);bar.test="test";console.log(bar.test)//undefined
这时候可以看到虽然给bar添加了属性test,但是仍然为undefined,当然这是在非严格模式下,严格模式下将抛出错误。
但是对该对象属性进行修改或者删除还是可行,只是扩展受到了限制
bar.name='Aenvgiell';console.log(bar.name)//Aenvgielldelete bar.age;console.log(bar.age);//undefined
可以使用
Object.isExtensible(obj)来查看某个对象是否是可扩展的,返回是一个布尔值。
Object.isExtensible(bar)//false
2.Object.seal(obj);
密封的对象是不可扩展的,在此基础上,他也不能删除属性,但是可以修改属性
var bar={"name":"kasol","age":25};Object.seal(bar);bar.test="test";console.log(bar.test)//undefineddelete bar.nameconsole.log(bar.name)//"kasol"
这时候可以看到虽然给bar添加了属性test,但是仍然为undefined;虽然删除了属性name,但是name依然存在。同样这是在非严格模式下,严格模式下将抛出错误。
但是对该对象属性进行修改是可行的
bar.name='Aenvgiell';console.log(bar.name)//Aenvgiell
可以使用
Object.isSealed(obj)来查看某个对象是否是密封的,返回是一个布尔值。
Object.isSealed(bar)//true
3.Object.freeze(obj)
冻结的对象是密封的,在此基础上,他也不能修改属性
var bar={"name":"kasol","age":25};Object.freeze(bar);bar.test="test";console.log(bar.test)//undefineddelete bar.nameconsole.log(bar.name)//"kasol" bar.name="Aenvgiell";console.log(bar.name)//"kasol"
这时候可以看到虽然给bar添加了属性test,但是仍然为undefined;虽然删除了属性name,但是name依然存在;修改了属性name但是也没有生效。同样这是在非严格模式下,严格模式下将抛出错误。
可以使用
Object.isFrozen(obj)来查看某个对象是否是冻结的,返回是一个布尔值。
Object.isFrozen(bar)//true
以上可以看出,防止篡改对象的严格优先级从高到低依次是
冻结>密封>扩展
阅读全文
0 0
- JS关于对象的安全性之扩展,密封,冻结
- JS 对象之扩展、密封、冻结三大特性
- JavaScript之扩展、密封以及冻结对象
- JS中禁止对象属性扩展、密封对象、冻结对象
- JS扩展、密封、冻结三大特性
- js对象冻结
- 面对对象之继承,密封
- 扩展js的String对象
- js之安全性
- Kotlin编程之伴生对象,抽象类,密封类
- -内核对象的安全性
- 关于用户冻结如何跳转的问题
- 关于 CGI 的安全性
- 关于“安全性”的思考
- 扩展js中对象的方法
- 扩展js原生对象的正确姿势
- 网站安全性之js注入
- 网站安全性之js注入
- H5简单动画的学习仅仅css操作
- 随着新日益增多的技术,如何正确的提升自己?
- 面向对象编程中的一些概念_Java
- select表单元素详解及下拉列表模拟实现
- myeclipse项目上传码云
- JS关于对象的安全性之扩展,密封,冻结
- mybatis的安全模糊查询
- PHP面向对象2-类的自动加载
- 矩阵·叉姐出的两道Determinant
- 正则前面的 (?i) (?s) (?m) (?is) (?im)
- 正则表达式里面(+?)
- WPF创建不规则形状的按钮
- linux关闭终端而不关闭通过该终端打开的软件
- 南阳oj 题目 488 素数环