JavaScript でオブジェクトを操作する場合、意図しない変更を防ぐためにその変更可能性を制御することが不可欠です。この目的のために JavaScript によって提供される 2 つのメソッドは、Object.freeze() と Object.seal() です。それらの違いと使用例を理解することが、堅牢なコードを作成する鍵となります。
Object.freeze() メソッドはオブジェクトを 不変にします。これは次のことを意味します:
Object.freeze(obj);
const obj = { name: "Alice", age: 25 }; Object.freeze(obj); obj.age = 30; // Does nothing (strict mode: throws an error) obj.gender = "female"; // Does nothing (strict mode: throws an error) delete obj.name; // Does nothing (strict mode: throws an error) console.log(obj); // { name: "Alice", age: 25 }
オブジェクトが凍結されているかどうかを判断するには、Object.isFrozen() を使用します。
console.log(Object.isFrozen(obj)); // true
Object.seal() メソッドはオブジェクトへの変更を制限しますが、Object.freeze() ほど厳密ではありません。次のことが可能になります:
Object.seal(obj);
const obj = { name: "Bob", age: 30 }; Object.seal(obj); obj.age = 35; // Allowed: Existing properties can be modified obj.gender = "male"; // Does nothing (strict mode: throws an error) delete obj.name; // Does nothing (strict mode: throws an error) console.log(obj); // { name: "Bob", age: 35 }
オブジェクトがシールされているかどうかを判断するには、Object.isSealed() を使用します。
Object.freeze(obj);
Feature | Object.freeze() | Object.seal() |
---|---|---|
Add new properties | Not allowed | Not allowed |
Remove existing properties | Not allowed | Not allowed |
Modify existing properties | Not allowed | Allowed |
Reconfigure property descriptors | Not allowed | Not allowed |
Use case | Immutable objects (constants) | Restrict structure but allow value changes |
const obj = { name: "Alice", age: 25 }; Object.freeze(obj); obj.age = 30; // Does nothing (strict mode: throws an error) obj.gender = "female"; // Does nothing (strict mode: throws an error) delete obj.name; // Does nothing (strict mode: throws an error) console.log(obj); // { name: "Alice", age: 25 }
console.log(Object.isFrozen(obj)); // true
オブジェクトの可変性との混乱を防ぐ: チーム環境での誤解を避けるために、オブジェクトが凍結または封印される時期と理由を明確に文書化します。
フリーズする前にシール
以上がJavaScript での Object.freeze() と Object.seal() のマスター: オブジェクトの可変性の制御の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。