JS如何禁止修改对象

有时候,我们需要禁止修改某些对象,以保证核心代码的安全性,这时可以采取以下方法:

一. 如果想要禁止修改对象的某条属性,可以使用Object.defineProperty()方法将这条属性的特性改为writable: falseconfigurable: false,这样该属性就变成了一个常量(不可修改、删除或配置)。

上面这个例子使用Object.defineProperty()方法使student对象的"age"属性变得不可修改、不可删除、不可配置(指无法再使用Object.defineProperty()方法修改属性的特性)。

二. 如果想禁止给对象添加属性(禁止扩展),可以将这个对象传给Object.preventExtensions()方法。

上面这个例子使用Object.preventExtensions()方法使student对象变得不可扩展,因此给student新增hate属性的操作不生效(虽然不会报错)。

要确定一个对象是否可扩展,可以把它传给Object.isExtensible()

三. 如果想禁止给对象添加属性且禁止配置或删除任何属性,可以使用Object.seal()方法(这个方法会在内部调用Object.preventExtensions()禁止对象扩展,并把其所有属性标记为configurable: false)。

上面这个例子使用Object.seal()方法密封了对象student,使之无法新增属性,也无法配置或删除任何属性。

可以使用Object.isSealed()确定对象是否被封存。

四. 如果想禁止给对象添加属性且禁止配置、删除或修改任何属性,可以使用Object.freeze()方法(这个方法会在内部调用Object.seal()密封对象,并把其所有属性标记为writable: false)。

上面这个例子使用Object.freeze()方法冻结了对象student,使之无法新增属性,也无法配置、删除或修改任何属性。

可以使用Object.isFrozen()方法确定对象是否被冻结。