JavaScript Object.isSealed()

Object.isSealed() 方法用于检查一个对象是否被密封。

示例

// by default, objects are not sealed
let empty = {};
console.log(Object.isSealed(empty));

// Output: false

isSealed() 语法

isSealed() 方法的语法是

Object.isSealed(obj)

isSealed() 方法是一个静态方法,因此需要通过 Object 类名来调用。


isSealed() 参数

isSealed() 方法接受

  • obj - 需要检查的对象

isSealed() 返回值

isSealed() 方法返回一个 Boolean 值,指示给定对象是否被密封。它返回

  • true - 如果 obj 被密封
  • false - 如果 obj 未被密封

注意:被密封的对象是不可扩展的,这意味着我们不能向对象添加新属性,也不能删除对象中的现有属性。

但是,被密封的对象可能是可写的,也可能不是。如果在调用 seal() 方法之前,被密封的对象是可写的,那么它将保持可写状态,反之亦然。


示例 1:JavaScript Object.isSealed() 与空对象

// objects are not sealed by default
let empty = {};

// check if empty object is sealed
console.log(Object.isSealed(empty)); 

// Output: false

// non-extensible empty objects are sealed
Object.preventExtensions(empty);

// check if empty object is sealed
console.log(Object.isSealed(empty)); 

// Output: true

示例 2:isSealed() 与非空对象

// create a non-empty object
let obj = { value: "A B C" };

// non-empty objects are sealed only when
// all its properties are non-configurable
Object.preventExtensions(obj);

// check if obj is sealed
console.log(Object.isSealed(obj));

// Output: false

// make all properties non-configurable
Object.defineProperty(obj, "value", { configurable: false });

// check if obj is sealed
console.log(Object.isSealed(obj)); 

// Output: true

从上面的示例可以看出,仅仅调用 preventExtensions() 方法并不能保证对象被密封。要密封一个对象,我们还需要确保其所有属性都是不可配置的。

因此,即使我们已经对 obj 调用了 preventExtensions(),在使用 isSealed() 方法时仍然得到 false 作为输出。

因此,我们使用 obj 上的 defineProperty() 方法将其中属性的 configurable 标志设置为 false。这确保了 obj 最终被密封。


示例 3:isSealed() 与 seal() 方法

let obj2 = { a: 1, b: 2, c: 3 };

// seal the obj2 object
// using the seal() method
Object.seal(obj2);

// check if obj2 is sealed console.log(Object.isSealed(obj2));
// Output: true

使用 seal() 方法总是能确保对象被密封。因此,在使用 obj2seal() 方法后,我们得到 true 作为输出。


另请阅读
你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战