Object.isSealed()

概要

オブジェクトが封印されているかを判定します。

構文

Object.isSealed(obj)

引数

obj
確認したいオブジェクトです。

説明

オブジェクトが封印されている場合は true が、そうでない場合は false が返ります。オブジェクトが 拡張不可 かつすべてのプロパティが設定変更不可であり、それゆえ削除できない場合 (ただし書き込み不可である必要はありません) 場合に、封印されているとなります。

// 既定でオブジェクトは封印されていません
var empty = {};
assert(Object.isSealed(empty) === false);

// 空のオブジェクトを拡張不可にすると、そのまま封印状態になります
Object.preventExtensions(empty);
assert(Object.isSealed(empty) === true);

// 空でないオブジェクトでは、そのプロパティをすべて設定変更不可にしない限り上記と同じにはなりません
var hasProp = { fee: "fie foe fum" };
Object.preventExtensions(hasProp);
assert(Object.isSealed(hasProp) === false);

// そこですべてのプロパティを設定変更不可にすると、オブジェクトは封印状態になります
Object.defineProperty(hasProp, "fee", { configurable: false });
assert(Object.isSealed(hasProp) === true);

// オブジェクトを封印する最も簡単な方法は、もちろん Object.seal です
var sealed = {};
Object.seal(sealed);
assert(Object.isSealed(sealed) === true);

// 封印されたオブジェクトはその定義により、拡張できません
assert(Object.isExtensible(sealed) === false);

// 封印されたオブジェクトは凍結されているかもしれませんが、必ずしもそうではありません
assert(Object.isFrozen(sealed) === true); // すべてのプロパティが書き込み不能でもあります

var s2 = Object.seal({ p: 3 });
assert(Object.isFrozen(s2) === false); // "p" は依然書き込み可能です

var s3 = Object.seal({ get p() { return 0; } });
assert(Object.isFrozen(s3) === true); // アクセサプロパティでは設定変更が可能かという事柄だけになります

ブラウザの互換性

機能 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 に基づきます。

参考情報

ドキュメントのタグと貢献者

 このページの貢献者: teoli, yyss
 最終更新者: teoli,