JavaScript 对象 isSealed() 方法
Object.isSealed()
方法用于检查对象是否被封闭。
示例
// 默认情况下,对象是不封闭的
let empty = {};
console.log(Object.isSealed(empty));
// 输出:false
isSealed() 语法
isSealed()
方法的语法是:
Object.isSealed(obj);
作为一个静态方法,isSealed()
方法使用 Object
类名来调用。
isSealed() 参数
isSealed()
方法接受:
- obj - 需要检查的对象
isSealed() 返回值
isSealed()
方法返回一个 Boolean
值,表示给定对象是否被封闭。它返回:
true
- 如果 obj 被封闭false
- 如果 obj 没有被封闭
注意:被封闭的对象是不可扩展的,这意味着我们不能在对象中添加新属性或删除现有属性。
然而,被封闭的对象可能是可写的,也可能不是。如果在使用 seal()
方法之前被封闭的对象是可写的,那么它将保持可写,反之亦然。
示例 1:JavaScript Object.isSealed() 使用空对象
// 默认情况下,对象是不封闭的
let empty = {};
// 检查空对象是否被封闭
console.log(Object.isSealed(empty));
// 输出:false
// 不可扩展的空对象是被封闭的
Object.preventExtensions(empty);
// 检查空对象是否被封闭
console.log(Object.isSealed(empty));
// 输出:true
示例 2:isSealed() 使用非空对象
// 创建一个非空对象
let obj = { value: "A B C" };
// 非空对象只有在
// 所有属性都不可配置时才被封闭
Object.preventExtensions(obj);
// 检查 obj 是否被封闭
console.log(Object.isSealed(obj));
// 输出:false
// 将所有属性设置为不可配置
Object.defineProperty(obj, "value", { configurable: false });
// 检查 obj 是否被封闭
console.log(Object.isSealed(obj));
// 输出:true
如上例所示,仅使用 preventExtensions()
方法并不保证对象将被封闭。为了封闭对象,我们还需要确保其所有属性都是不可配置的。
因此,即使我们已经在 obj 上使用了 preventExtensions()
,使用 isSealed()
方法时我们仍然得到 false
。
因此,我们在 obj 上使用了 defineProperty()
方法,将其属性的 configurable
标志设置为 false
。这确保了 obj 最终被封闭。
示例 3:使用 seal() 方法的 isSealed()
let obj2 = { a: 1, b: 2, c: 3 };
// 使用 seal() 方法封闭 obj2 对象
Object.seal(obj2);
// 检查 obj2 是否被封闭
console.log(Object.isSealed(obj2));
// 输出:true
使用 seal()
方法总是确保对象被封闭。因此,使用 seal()
方法后,我们得到 true
。
推荐阅读: