跳到主要内容

JavaScript 对象的 Object.isFrozen() 方法详解

Object.isFrozen()方法检查一个对象是否被冻结。

示例

let obj = { name: "JavaScript" };

// 新对象是可扩展的,所以它们不是冻结的
console.log(Object.isFrozen(obj));

// 输出: false

isFrozen()语法

isFrozen()方法的语法是:

Object.isFrozen(obj);

这里,isFrozen()是一个静态方法。因此,我们需要使用类名Object来访问这个方法。

注意: 冻结的对象不能再被更改。冻结一个对象会阻止:

  • 向对象添加新属性。
  • 从对象移除现有属性。
  • 更改现有属性的可枚举性、可配置性或可写性。
  • 更改现有对象属性和原型的值。

isFrozen()参数

isFrozen()方法接受:

  • obj - 需要检查是否被冻结的对象。

isFrozen()返回值

isFrozen()方法返回:

  • true - 如果对象被冻结
  • false - 如果对象未被冻结

示例:JavaScript对象Object.isFrozen()

let newObj = { b: 2 };

// 阻止扩展不会冻结对象
// 因为其属性仍然是可配置的
Object.preventExtensions(newObj);

// 检查newObj是否被冻结
console.log(Object.isFrozen(newObj));

// 输出: false

// 使newObj不可写
Object.defineProperty(newObj, "b", {
writable: false,
});

// 对象未被冻结
console.log(Object.isFrozen(newObj));

// 输出: false

// 使用freeze()方法
Object.freeze(newObj);

// 对象最终被冻结
console.log(Object.isFrozen(newObj));

// 输出: true

在上面的示例中,我们尝试通过

  • 使用preventExtensions()方法,和
  • 通过设置writable标志为false来使其不可写,

来冻结newObj。

然而,这两种方法都未能冻结对象。

最后的输出表明,只有在调用freeze()方法后,newObj才被冻结。

推荐阅读: