Object.isSealed() 语法
Object.isSealed() 是 JavaScript 的一个静态方法,它用于判断某个对象是否为 “密封对象” 。其中,“密封对象” 具有以下特性。
- 不可扩展:不能添加新属性。
- 不可配置:现有属性的特性不能被修改(例如不能改变 writable、enumerable、configurable,也不能删除属性)。
- 可写:现有属性的值可以被修改(如果它们是可写的)。
语法:
Object.isSealed(obj)说明:
Object.isSealed() 方法接收单个参数。
obj(必选):表示要判断的对象。
对于 Object.isSealed() 方法,小伙伴们要清楚以下几点。
- Object.isSealed() 实现的是浅层检测,它只会检测对象本身是否被封闭。如果对象包含其他对象(如数组或嵌套对象),它不会递归地检查这些嵌套对象是否也被封闭。
- 如果一个对象是封闭的,那么它也一定是不可扩展的,即 Object.isExtensible() 返回 false。
- 一个被冻结(frozen)的对象也是被封闭的。如果 Object.isFrozen() 返回 true,那么 Object.isSealed() 也会返回 true。
注意: isSealed() 是一个静态方法,它只能被类名(即 Object)调用,而无法被实例调用。
Object.isSealed() 摘要
| 属于 | JavaScript Object 对象 |
|---|---|
| 使用频率 | 中 |
| 官方文档 | 查看 |
| MDN | 查看 |
Object.isSealed() 示例
接下来,我们通过几个简单的例子来讲解一下 Object.isSealed() 方法是如何使用的。
示例 1:Object.isSealed() 判断普通对象
const obj = {name: "Jack", age: 20};
console.log(Object.isSealed(obj));运行结果如下。
false示例 2:Object.isSealed() 判断密封对象
const obj = Object.seal({name: "Jack", age: 20});
console.log(Object.isSealed(obj));运行结果如下。
true分析:
Object.seal() 方法会将一个对象转换成一个密封对象。然后使用 Object.isSealed() 方法判断该对象会返回 true。
示例 3:Object.isSealed() 判断冻结对象
const obj = Object.freeze({name: "Jack", age: 20});
console.log(Object.isSealed(obj));运行结果如下。
true分析:
Object.freeze() 方法会将一个对象转换成一个冻结对象,使用 Object.isSealed() 方法判断该对象同样会返回 true。
示例 4:Object.isSealed() 判断 3 种对象
const obj1 = { a: 1 };
Object.freeze(obj1);
console.log(Object.isSealed(obj1));
const obj2 = { a: 1 };
Object.seal(obj2);
console.log(Object.isSealed(obj2));
const obj3 = { a: 1 };
Object.preventExtensions(obj3);
console.log(Object.isSealed(obj3));运行结果如下。
true
true
false分析:
Object.freeze() 和 Object.seal() 创建的对象都是密封的,因此返回 true。而Object.preventExtensions() 创建的非空对象,不是密封的。这是因为它只禁止添加新属性,但现有属性依然可以被删除(configurable 仍为 true)
注意: 对于 “空对象 {}” 来说,由于它没有任何属性需要被 “锁定”,所以这 3 个方法都会让它变成冻结状态(isFrozen 返回 true)。但在实际开发中,我们主要关注的是非空对象。
