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