【JavaScript】ネストされたオブジェクトにES6デフォルトパラメータを設定する方法
ネストされたオブジェクトにもデフォルトパラメータは使える?
はい、ES6ではネストされた(入れ子になった)オブジェクトに対してもデフォルトパラメータを設定することが可能です。デフォルト引数と分割代入(デストラクチャリング)を組み合わせることで、オブジェクトの深い階層にあるプロパティにも初期値を簡単に指定できます。
以下に具体的なコード例を示します。
コード例
function callBackFunctionDemo({ cl: { callFunctionName = "callBackFunction", values = 100 } = {} } = {}) {
console.log(callFunctionName);
console.log(values);
}
// 引数なしで呼び出すと、デフォルト値が出力される // 100
callBackFunctionDemo();
// 値を指定して呼び出すと、その値が出力される // 500
callBackFunctionDemo({ cl: { values: 500 } });
コードの仕組み
この関数では、パラメータを受け取ると同時に分割代入を行っています。ポイントは次の2つです。
- 最も外側の
= {}:引数自体が渡されなかった場合に、空オブジェクトが代わりに使用されます。 - 内側の
{ callFunctionName = "callBackFunction", values = 100 } = {}:clプロパティが存在しない場合も空オブジェクトに置き換えられ、各プロパティには=の右側に記述したデフォルト値が適用されます。
この二重構造のおかげで、引数を一切渡さなくてもエラーにならず、安全にデフォルト値が利用できます。
実行方法
上記のプログラムを実行するには、Node.js環境で次のコマンドを使用します。
node fileName.js
ここでは、ファイル名を demo296.js としています。
出力結果
コンソールには次のように表示されます。
PS C:\Users\Amit\javascript-code> node demo296.js callBackFunction 100 callBackFunction 500
動作のポイント
callBackFunctionDemo()を引数なしで呼び出すと、すべてのデフォルト値が適用され、「callBackFunction」と「100」が出力されます。callBackFunctionDemo({ cl: { values: 500 } })のように一部だけ値を渡すと、指定した「500」のみが上書きされ、関数名はデフォルト値のまま出力されます。
このように、ネストされたオブジェクトの各階層にデフォルト値を定義しておけば、柔軟かつ堅牢な関数設計が可能になります。
-
【図解付き】JavaScriptにおけるオブジェクトの等価性をわかりやすく解説
JavaScriptでは、文字列・数値・真偽値などのプリミティブ型はその「値」に基づいて比較されます。一方、オブジェクト(ネイティブオブジェクトでも独自に定義したカスタムオブジェクトでも)は「参照」に基づいて比較されます。 「参照による比較」とは、複数のオブジェクトがメモリ上の同じ場所を指しているかどうかを判定するという意味です。つまり、プロパティの中身が完全に一致していても、別々に生成された2つのオブジェクトは等しいとみなされません。 押さえておきたいポイント プリミティブ型: 値が同じであれば == や === の比較で true になる オブジェクト型: 同じインスタンス(同一の参照
-
JavaScriptで2つのオブジェクトを比較しながら配列のネストされた値をグループ化する方法
この記事では、2つのオブジェクト(before と after)を比較しながら、ネストされた配列の値を1つの行にグループ化する方法を解説します。データの差分を表形式で整理したい場合などに役立つテクニックです。入力データの例まず、次のようなJSONオブジェクトがあるとします。before(変更前)と after(変更後)の2つの状態が含まれ、それぞれの device 配列の中に、id、price、features(機能名と価格)というネストされた構造を持っています。const input = { before: { device: [ { id: 1234