JavaScript Object.isFrozen() 方法

Object.isFrozen() 语法

Object.isFrozen() 是 JavaScript 的一个静态方法,它用于判断某个对象是否为 “冻结对象” 。其中,“冻结对象” 有以下特性。

  • 不可扩展:不能添加新属性。
  • 不可配置:现有属性的特性不能被修改(例如不能改变 writable、enumerable、configurable,也不能删除属性)。
  • 不可写:所有自身数据属性的值都不能被修改。

语法:

Object.isFrozen(obj)

说明:

Object.isFrozen() 方法接收单个参数。

  • obj(必选):是你要判断的对象。

注意:

  • isFrozen() 是一个静态方法,它只能被类名(即 Object)调用,而无法被实例调用。
  • Object.isFrozen() 实现的是浅层检测。它只会检测对象本身是否被冻结,如果对象包含其他对象(如数组或嵌套对象),它不会递归地检查这些嵌套对象是否也被冻结。
  • 如果一个对象是冻结的,那么它也一定是不可扩展的,即 Object.isExtensible(obj) 返回 false。并且它一定是被封闭的,即 Object.isSealed(obj) 返回 true。

Object.isFrozen() 摘要

属于 JavaScript Object 对象
使用频率
官方文档 查看
MDN 查看

Object.isFrozen() 示例

接下来,我们通过几个简单的例子来讲解一下 Object.isFrozen() 方法是如何使用的。

示例 1:Object.isFrozen() 判断普通对象

const obj = {name: "Jack", age: 20};
console.log(Object.isFrozen(obj));

运行结果如下。

false

示例 2:Object.isFrozen() 判断冻结对象

const obj = Object.freeze({name: "Jack", age: 20});
console.log(Object.isFrozen(obj));

运行结果如下。

true

分析:

Object.freeze() 方法会将一个对象冻结,使其成为一个冻结对象。然后使用 Object.isFrozen() 方法判断该对象会返回 true。

示例 3:Object.isFrozen() 判断 3 种对象

const obj1 = { a: 1 };
Object.freeze(obj1);
console.log(Object.isFrozen(obj1));

const obj2 = { a: 1 };
Object.seal(obj2);
console.log(Object.isFrozen(obj2));

const obj3 = { a: 1 };
Object.preventExtensions(obj3);
console.log(Object.isFrozen(obj3));

运行结果如下。

true
false
false

分析:

对于这个例子来说,我们应该清楚:只有 Object.freeze() 才能让非空对象变为冻结状态。

  • Object.seal() 仅限制添加和删除属性,现有属性仍可修改,所以也不算冻结。
  • Object.preventExtensions() 仅限制添加新属性,现有属性仍可改可删,所以不算冻结。

注意: 对于 “空对象 {}” 来说,由于它没有任何属性需要被 “锁定”,所以这 3 个方法都会让它变成冻结状态(isFrozen 返回 true)。但在实际开发中,我们主要关注的是非空对象。

上一篇: Object.hasOwn()

下一篇: Object.isSealed()

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号