このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。
Object.isFrozen()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
Object.isFrozen() はオブジェクトが凍結されているかどうかを判定します。
In this article
試してみましょう
const object = { property1: 42,};console.log(Object.isFrozen(object));// 予想される結果: falseObject.freeze(object);console.log(Object.isFrozen(object));// 予想される結果: true構文
js
Object.isFrozen(obj)引数
obj確認したいオブジェクトです。
返値
論理値で、与えられたオブジェクトが凍結されているかどうかを示します。
解説
オブジェクトが凍結状態 (frozen) とは、オブジェクトが拡張可能ではなく、すべてのプロパティは構成不可であり、そしてすべてのデータプロパティ(これはゲッターやセッターコンポーネントを持つアクセサープロパティ以外のものを指します)が書き込み不可である場合です。
例
>Object.isFrozen の使用
js
// 新しいオブジェクトは拡張可能であるので、凍結されていませんObject.isFrozen({}); // false// 拡張可能ではない空のオブジェクトは、他に何もしなくても// 凍結されていますconst vacuouslyFrozen = Object.preventExtensions({});Object.isFrozen(vacuouslyFrozen); // true// プロパティをひとつ持つ新しいオブジェクトも拡張可能であり、// それゆえ凍結されていませんconst oneProp = { p: 42 };Object.isFrozen(oneProp); // false// オブジェクトを拡張不可にしても、それは凍結されません// なぜなら、まだプロパティが設定変更可能// (かつ書き込み可能) であるからですObject.preventExtensions(oneProp);Object.isFrozen(oneProp); // false// ...しかしプロパティを削除すると、そのオブジェクトは// 他に何もしなくても凍結されますdelete oneProp.p;Object.isFrozen(oneProp); // true// 書き込み不可であるが設定変更可能なプロパティを持つ、// 拡張不可のオブジェクトは、凍結されていませんconst nonWritable = { e: "plep" };Object.preventExtensions(nonWritable);Object.defineProperty(nonWritable, "e", { writable: false,}); // 書き込み不可にしますObject.isFrozen(nonWritable); // false// プロパティを構成不可にすると、// オブジェクトは凍結されますObject.defineProperty(nonWritable, "e", { configurable: false,}); // 構成不可にしますObject.isFrozen(nonWritable); // true// 構成不可であるが書き込み可能なプロパティを持つ、// 拡張不可のオブジェクトは、やはり凍結されていませんconst nonConfigurable = { release: "the kraken!" };Object.preventExtensions(nonConfigurable);Object.defineProperty(nonConfigurable, "release", { configurable: false,});Object.isFrozen(nonConfigurable); // false// プロパティを書き込み不可にすると、オブジェクトは// 凍結されますObject.defineProperty(nonConfigurable, "release", { writable: false,});Object.isFrozen(nonConfigurable); // true// 設定変更可能なアクセサープロパティを持つ拡張不可の// オブジェクトは、凍結されていませんconst accessor = { get food() { return "yum"; },};Object.preventExtensions(accessor);Object.isFrozen(accessor); // false// プロパティを構成不可にすると、オブジェクトは凍結されますObject.defineProperty(accessor, "food", { configurable: false,});Object.isFrozen(accessor); // true// なお、オブジェクトを凍結するもっとも簡単な方法は、// Object.freeze を呼び出すことですconst frozen = { 1: 81 };Object.isFrozen(frozen); // falseObject.freeze(frozen);Object.isFrozen(frozen); // true// 定義によると、凍結されたオブジェクトは拡張不可ですObject.isExtensible(frozen); // false// また、凍結されたオブジェクトは封印されていますObject.isSealed(frozen); // trueオブジェクト以外の型強制
ES5 では、このメソッドの引数がオブジェクトではない場合(プリミティブの場合)、TypeError が発生します。 ES2015 以降では、オブジェクトでない引数は、それが凍結された通常のオブジェクトであるかのように扱われ、単にtrue を返します。
js
Object.isFrozen(1);// TypeError: 1 is not an object (ES5 code)Object.isFrozen(1);// true (ES2015 code)仕様書
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-object.isfrozen> |