JavaScriptでオブジェクトが拡張可能かどうかを確認するための`Object.isExtensible()`メソッドについて、基本的な使い方から実践的な例まで詳しく解説します。
Object.isExtensible()とは
`Object.isExtensible()`は、JavaScriptオブジェクトが新しいプロパティを追加できる状態かどうかを確認するメソッドです。このメソッドは`true`または`false`を返します。
基本的な使い方
const obj = {};
console.log(Object.isExtensible(obj)); // true
// オブジェクトを拡張不可にする
Object.preventExtensions(obj);
console.log(Object.isExtensible(obj)); // false実践的な使用例
1. オブジェクトの安全性チェック
function safelyAddProperty(obj, key, value) {
if (Object.isExtensible(obj)) {
obj[key] = value;
return true;
}
return false;
}
const user = { name: "John" };
console.log(safelyAddProperty(user, "age", 25)); // true2. シールされたオブジェクトの確認
const sealedObj = { id: 1 };
Object.seal(sealedObj);
console.log(Object.isExtensible(sealedObj)); // false3. フリーズされたオブジェクトの確認
const frozenObj = { data: "test" };
Object.freeze(frozenObj);
console.log(Object.isExtensible(frozenObj)); // false注意点
- プリミティブ値に対して使用すると常に`false`を返します
console.log(Object.isExtensible(42)); // false
console.log(Object.isExtensible("string")); // false- `null`や`undefined`に対して使用するとエラーが発生します
// TypeError: Object.isExtensible called on non-object
console.log(Object.isExtensible(null));ブラウザ互換性
`Object.isExtensible()`は主要なモダンブラウザで広くサポートされています:
- Chrome 6以降
- Firefox 4以降
- Safari 5.1以降
- Edge 12以降
まとめ
`Object.isExtensible()`は、オブジェクトの拡張可能性を確認する重要なメソッドです。特にセキュリティが重要なアプリケーションや、オブジェクトの不変性を保証する必要がある場合に非常に有用です。
基本的な使い方を理解し、適切な場面で活用することで、より安全で堅牢なJavaScriptコードを書くことができます。