JS紅皮書解讀之防篡改對象

前言:
去年7月份在簡書寫的,發現後端、React中也有體現,以爲有必要在微信上分享下。後端

注意:一旦把對象定義爲防篡改,就沒法撤銷了。微信

1.不可擴展對象
擴展指能夠給對象添加屬性和方法。spa

使用Object.preventExtensions(object)阻止對象擴展3d

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

注意:
(1)嚴格模式下,不是undefined而是報錯。
(2)能夠刪除或修改已有對象屬性,但不可添加新屬性code

使用Object.isExtensible(object) 判斷對象是否可擴展對象

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

2.密封的對象(sealed object)
注意:
(1)被密封的對象不可擴展,所以可用Object.isExtensible(object)來判斷
(2)能夠修改,不可刪除已有屬性,不可添加新屬性blog

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)判斷是否密封rem

3.凍結的對象(frozen object)
凍結的對象是最嚴格的防篡改級別,既不可擴展,也是密封的,不可修改屬性。it

使用Object.freeze(object)凍結對象io

對於JS庫做者而言,凍結對象可防止有人修改庫的核心對象。


(完)

相關文章
相關標籤/搜索