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

前言:
去年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庫作者而言,凍結對象可防止有人修改庫的核心對象。


(完)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章