防篡改是什么
定义的对象默认在任何时候、任何位置,无论有意义还是无意义的都可以修改对象的属性和方法。
而这些篡改可能会影响对象的内置属性或方法,从而导致对象的正常功能可能无法使用。
JavaScript在ECMAScript 5 版本中新增了放置篡改对象的属性或方法的机制,共提供了以下三级保护方式:
- 禁止扩展:禁止为对象扩展新的属性或方法
- 密封对象:禁止扩展新的属性或方法,禁止置现有的属性或方法的描述符,仅允许读写属性的值。
- 冻结对象:禁止对对象执行任何修改操作。
禁止扩展
如果禁止为对象扩展新的属性或方法,需要修改对象属性的extensible为false。
- Object.preventExtensions()方法用于设置指定对象不可扩展,即不能新增属性或方法。
- Oject.isExtensible()方法判断一个对象是否是可扩展的(是否可以在他上面添加新的属性。
密封对象
指禁止扩展新的属性或方法,禁止置现有的属性或方法的描述符
- Object.seat()方法用于封闭一 个对象,阻止添加新属性井将所有现有属性标记为不可配置。当前属性的值只要可写就可以改变。
- Object.isSealed()方法判断一 个对象是否被密封。
冻结对象
- Object.freeze()方法用于冻结一 个对象 ,冻结指的是不能向这个对象添加新的属性,不能修改其已有属性的值,不能删除已有属性,以及不能修改该对象已有属性的可枚举性、可配置性、可写性。该方法返回被冻结的对象。
- Object.isErozen()方法判断一 个对象是否被冻结。