【JavaScript】Object.freeze()でオブジェクトの変更を禁止する方法を解説
JavaScriptでは、Object.freeze()メソッドを使用することで、オブジェクトに対する新規プロパティの追加や既存プロパティの変更・削除などを禁止できます。freeze()によって凍結されたオブジェクトは「イミュータブル(不変)」な状態になり、後から値を書き換えることができません。
Object.freeze()の基本動作
以下のコードでは、freeze()で凍結した後にプロパティの値を変更しようとしていますが、プロパティを変更できないため、元の値がそのまま保持されます。
コード例
const canNotChangeTheFieldValueAfterFreeze = { value1: 10, value2: 20 };
Object.freeze(canNotChangeTheFieldValueAfterFreeze);
canNotChangeTheFieldValueAfterFreeze.value1 = 100;
console.log("After changing the field value1 from 10 to 100 =" + canNotChangeTheFieldValueAfterFreeze.value1);
プログラムの実行方法
上記のプログラムを実行するには、Node.js環境で以下のコマンドを使用します。
node fileName.js
実行結果
ここでは、ファイル名を「demo97.js」としています。実行すると、以下の出力が得られます。
PS C:\Users\Amit\JavaScript-code> node demo97.js After changing the field value1 from 10 to 100 =10
解説
出力結果を見ると、値を「100」に変更しようとしたにもかかわらず、コンソールには元の値「10」が表示されています。これは、Object.freeze()によってオブジェクトが凍結され、プロパティの変更操作が無視されるためです。
なお、freeze()には以下のような特徴があります。
- 新しいプロパティを追加できない
- 既存プロパティの値を変更できない
- 既存プロパティを削除できない
- プロトタイプの変更もできない
また、厳格モード("use strict")下で凍結されたオブジェクトを変更しようとすると、エラーがスローされます。オブジェクトが凍結されているかどうかは、Object.isFrozen()メソッドで確認できます。設定値や定数データなど、意図せず変更されたくないオブジェクトを保護したい場合に、freeze()は非常に有効な手段です。
-
JavaScriptでインポートしたオブジェクトを分割代入(デストラクチャリング)する方法
JavaScriptでは、ESモジュールからインポートしたオブジェクトに対して分割代入(デストラクチャリング)を使うことで、必要なプロパティだけを個別の変数として簡潔に取り出すことができます。ここでは、import で読み込んだオブジェクトを分割代入する具体的な手順とコード例を紹介します。 ポイント:分割代入の基本構文 オブジェクトの分割代入は、次のように波括弧 { } の中に取り出したいプロパティ名を並べて記述します。let {プロパティ1, プロパティ2, プロパティ3} = オブジェクト;この構文は、インポートされたデフォルトエクスポートのオブジェクトにもそのまま適用できます。 コード例
-
JavaScriptで既存のオブジェクトにプロパティとメソッドを追加する方法
JavaScriptのオブジェクトは動的な性質を持っており、一度作成した後でも、いつでも新しいプロパティやメソッドを追加できます。最もシンプルな方法は、ドット記法(オブジェクト名.プロパティ名)を使って値を代入することです。プロパティに関数を代入すれば、それがそのままメソッドとして機能します。 基本的な書き方 object.newProperty = value; object.newMethod = function() { // 処理 }; サンプルコード 以下は、既存の student オブジェクトにプロパティとメソッドを追加し、その内容を画面に表示する完全な例で