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()
方法总是能确保对象被密封。因此,在使用 obj2 的 seal()
方法后,我们得到 true
作为输出。
另请阅读