概要
オブジェクトが凍結されているかを判定します。
構文
Object.isFrozen(obj)
引数
- obj
- 確認したいオブジェクトです。
説明
オブジェクトが拡張可能ではなく、すべてのプロパティは設定変更不可であり、そしてすべてのデータプロパティ (これは getter や setter コンポーネントを持つアクセサプロパティではないものを指します) が書き込み不可である場合に、凍結されているとなります。
例
// 新しいオブジェクトは拡張可能であるので、凍結されていません
assert(Object.isFrozen({}) === false);
// 拡張可能ではない空のオブジェクトは、他に何もしなくても凍結されています
var vacuouslyFrozen = Object.preventExtensions({});
assert(Object.isFrozen(vacuouslyFrozen) === true);
// プロパティをひとつ持つ新しいオブジェクトも拡張可能であり、それゆえ凍結されていません
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);
// また、凍結されたオブジェクトは封印されています
assert(Object.isSealed(frozen) === true);
ブラウザの互換性
現在、互換性データを可読形式の JSON フォーマットに置き換えているところです。
この互換性一覧は古い形式を使っており、これに含まれるデータの置き換えが済んでいません。
手助けしていただける場合は、こちらから!
| 機能 | Firefox (Gecko) | Chrome | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| 基本サポート | 4 (2.0) | 6 | 9 | 未サポート | 5.1 |
| 機能 | Firefox Mobile (Gecko) | Android | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|
| 基本サポート | ? | ? | ? | ? | ? |
Kangax's compat table に基づきます。