JavaScript 高级技巧——“防篡改对象”的注意要点
2016-07-14 17:13
423 查看
防篡改对象
不可扩展对象
默认情况下,所有对象都是可扩展的:var person = { name: "Oliver" }; person.age = 18; console.log(person.age); //18
不可扩展可以使用这个方法:
Object.preventExtensions(obj);
var person = { name: "Oliver" }; person.age = 18; console.log(person.age); //18Object.preventExtensions(person);
person.gender = "male";
console.log(person.gender); //undefined
严格模式下会抛出错误;
一旦设置防扩展, 对象就无法添加新的属性和方法。 已有的属性方法不受影响, 这些属性方法仍然可以修改和删除。
var person = { name: "Oliver" }; person.age = 18; console.log(person.age); //18Object.preventExtensions(person);
person.gender = "male";
console.log(person.gender); //undefined
person.name = "Oli";
console.log(person.name); //Oli
另外还可以通过使用
Object.isExtensible()方法来确定对象是否可扩展
var person = { name: "Oliver" }; person.age = 18; console.log(person.age); //18Object.preventExtensions(person);
person.gender = "male";
console.log(person.gender); //undefined
person.name = "Oli";
console.log(person.name); //Oli
console.log(Object.isExtensible(person)); //False
密封对象
密封对象可以使用方法: Object.seal(obj);
var person = { name: "Oliver" }; Object.seal(person); person.age = 18; console.log(person.age); //undefined person.name = "Oli"; console.log(person.name); //"Oli" delete person.name; console.log(person.name); //"Oli"
一旦设置密封对象, 不可以进行扩展, 已有属性和方法不可以删除, 但是属性值是可以修改的。
严格模式尝试添加或删除对象成员会抛出错误;
var person = { name: "Oliver" }; Object.seal(person); console.log(Object.isSealed(person)); //True console.log(Object.isExtensible(person)); //False
冻结的对象
冻结对象可以使用方法: Object.freeze(obj);
一旦设置冻结对象, 既不可以扩展, 又是密封的, 只有通过访问器的set函数才可以修改属性值, 其他情况下不允许修改。
var person = { name: "Oliver" }; Object.freeze(person); person.name = "Oli"; console.log(person.name); //"Oliver" person.age = 18; console.log(person.age); //undefined console.log(Object.isFrozen(person)); //True
检测是否被冻结,用
Object.isFrozen()方法
源引:https://segmentfault.com/a/1190000004518733
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 最后一次说说闭包
- Ajax
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子
- JavaScript 各种遍历方式详解