オブジェクトを不変にする(シャロー)
// ── 基本: オブジェクトを「読み取り専用」にする ──────────
const config = Object.freeze({
API_URL: 'https://api.example.com',
MAX_RETRY: 3,
DEBUG: false,
});
// ❌ 変更しようとしても無視される(strictモードではTypeError)
config.DEBUG = true; // 無視
config.NEW_KEY = 'value'; // 無視
delete config.API_URL; // 無視
console.log(Object.isFrozen(config)); // true
// ── 主な用途: 定数オブジェクト ────────────────────────
// constだけではオブジェクトの中身は変更できるので
// freeze を使うと本当に変更不可になる
// ⚠️ 浅いフリーズ: ネストしたオブジェクトは変更できる
const deep = Object.freeze({ inner: { value: 1 } });
deep.inner.value = 999; // ← これは変更できてしまう!ネストしたオブジェクトは凍結されないため深い不変性にはimmerなどを使う。定数オブジェクトの保護に有用。