跳到主要内容

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

推荐阅读: