JS红皮书解读之防篡改对象

25次阅读

共计 708 个字符,预计需要花费 2 分钟才能阅读完成。

前言:
去年 7 月份在简书写的,发现后端、React 中也有体现,觉得有必要在微信上分享下。

注意:一旦把对象定义为防篡改,就无法撤销了。

1. 不可扩展对象
扩展指可以给对象添加属性和方法。

使用 Object.preventExtensions(object) 阻止对象扩展

   let a={name:'chen'}
    Object.preventExtensions(a)
    a.age=18
    console.log(a.age) //undefined
    delete a.name
    console.log(a) //{}

注意:
(1)严格模式下,不是 undefined 而是报错。
(2)可以删除或修改已有对象属性,但不可添加新属性

使用Object.isExtensible(object) 判断对象是否可扩展

console.log(Object.isExtensible(a))  //false

2. 密封的对象 (sealed object)
注意:
(1)被密封的对象不可扩展,因此可用 Object.isExtensible(object)来判断
(2)可以修改,不可删除已有属性,不可添加新属性

    Object.seal(a)
    a.age=20
    delete a.name
    console.log(a.name) //chen
    a.name='ch'
    console.log(a.name) //ch

使用 Object.isSealed(object)判断是否密封

3. 冻结的对象 (frozen object)
冻结的对象是最严格的防篡改级别,既不可扩展,也是密封的,不可修改属性。

使用 Object.freeze(object)冻结对象

对于 JS 库作者而言,冻结对象可防止有人修改库的核心对象。


(完)

正文完
 0