.isFrozen()

オブジェクトが凍結(frozen)されているかを調べます。

文法

Object.isFrozen(obj)
引数 説明
obj 調べる対象のオブジェクトを指定します。

拡張可能(extensible)では無く、その全てのプロパティは設定不可(non-configurable)であり、 全てのデータプロパティ(getterとsetterコンポーネントを持つアクセサプロパティでは無いプロパティ)が、 書き込み不可(non-writable)である場合にのみ、 オブジェクトは凍結(frozen)されているとみなされます。

// 新しいオブジェクトは拡張可能であるため、
// 凍結(frozen)されていません。
assert(Object.isFrozen({}) === false);

// 拡張不可な空のオブジェクトを凍結する事は無意味な行為です。
var vacuouslyFrozen = Object.preventExtensions({});
assert(Object.isFrozen(vacuouslyFrozen) === true);

// プロパティを1つ持つ新しいオブジェクトは拡張可能でもあるため、凍結されていません。
var oneProp = { p: 42 };
assert(Object.isFrozen(oneProp) === false);

// オブジェクトの拡張を塞ぐだけでは、まだオブジェクトを凍結することになりません。
// 何故なら、それだけではプロパティはまだ設定可能(と書き込み可能)だからです。
Object.preventExtensions(oneProp);
assert(Object.isFrozen(oneProp) === false);

// ...ただし、プロパティを削除することで、オブジェクトは無意味な凍結になります。
delete oneProp.p;
assert(Object.isFrozen(oneProp) === true);

// 拡張不可、書き込み不可のオブジェクトであっても、
// まだ設定可能であるため、凍結されません。
var nonWritable = { e: "plep" };
Object.preventExtensions(nonWritable);
Object.defineProperty(nonWritable, "e", { writable: false }); // 書き込み不可に
assert(Object.isFrozen(nonWritable) === false);

// 設定不可にプロパティを変更すると、オブジェクトは凍結されます。
Object.defineProperty(nonWritable, "e", { configurable: false }); // 設定不可に
assert(Object.isFrozen(nonWritable) === true);

// 拡張不可、設定不可のオブジェクトであっても、
// まだ書き込み可能であるため、凍結されません。
var nonConfigurable = { release: "the kraken!" };
Object.preventExtensions(nonConfigurable);
Object.defineProperty(nonConfigurable, "release", { configurable: false });
assert(Object.isFrozen(nonConfigurable) === false);

// 書き込み不可にプロパティを変更すると、オブジェクトは凍結されます。
Object.defineProperty(nonConfigurable, "release", { writable: false });
assert(Object.isFrozen(nonConfigurable) === true);

// 拡張不可のオブジェクトであっても、
// アクセサプロパティが設定可能であれば、凍結されません。
var accessor = { get food() { return "yum"; } };
Object.preventExtensions(accessor);
assert(Object.isFrozen(accessor) === false);

// ...ただし、このプロパティを設定不可にすると、
// オブジェクトは凍結されます。
Object.defineProperty(accessor, "food", { configurable: false });
assert(Object.isFrozen(accessor) === true);

// オブジェクトを凍結させる最も簡単な方法は、
// Object.freezeがあれば、それをオブジェクト上で呼び出すことです。
var frozen = { 1: 81 };
assert(Object.isFrozen(frozen) === false);
Object.freeze(frozen);
assert(Object.isFrozen(frozen) === true);

// これにより、凍結されたオブジェクトは拡張不可になります。
assert(Object.isExtensible(frozen) === false);

// また、これにより凍結されたオブジェクトは封印(sealed)されます。
assert(Object.isSealed(frozen) === true);

仕様

ブラウザ互換性

デスクトップ
機能 Chrome Firefox
(Gecko)
IE Opera Safari
基本 6 4.0 (2.0) 9 × 5.1
モバイル
機能 Android Firefox
Mobile
IE
Mobile
Opera
Mobile
Safari
Mobile
基本 ? ? ? ? ?

Based on Kangax's compat table.

関連項目

 Back to top

© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.

このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。

  • 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
  • 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
  • MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
  • "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。