読み込み中...

JavaScriptにおける分割代入のデフォルト値を設定する方法5選

JavaScriptの分割代入で初期値を設定する方法 JS
この記事は約13分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

●分割代入とデフォルト値の概要

基本的な文法は理解しているけれど、応用的な使い方に悩むことが多いのではないでしょうか。

そんな皆さんに、今日は効率的なコーディングテクニックの1つ、「分割代入」について詳しくお話ししたいと思います。

○分割代入とは?

分割代入(Destructuring assignment)とは、JavaScriptのES6で導入された構文で、オブジェクトや配列から特定のプロパティや要素を抽出し、変数に割り当てる方法のことを指します。

分割代入を使うことで、コードの可読性が上がり、より簡潔に記述することができます。

例えば、次のようなオブジェクトがあったとします。

const user = {
  name: '山田太郎',
  age: 25,
  address: {
    city: '東京',
    country: '日本'
  }
};

従来の方法では、オブジェクトのプロパティにアクセスするために、次のように記述していました。

const name = user.name;
const age = user.age;
const city = user.address.city;
const country = user.address.country;

しかし、分割代入を使えば、次のように簡潔に書くことができます。

const { name, age, address: { city, country } } = user;

この記述により、userオブジェクトからnameageaddressオブジェクト内のcitycountryを抽出し、それぞれ同名の変数に割り当てています。

○デフォルト値の必要性

分割代入を使う際に、抽出しようとしているプロパティや要素が存在しない場合があります。その場合、変数にはundefinedが割り当てられます。

しかし、場合によっては、プロパティや要素が存在しない時にデフォルトの値を使用したいこともあるでしょう。

そこで登場するのが、分割代入におけるデフォルト値の設定です。

デフォルト値を設定することで、プロパティや要素が存在しない場合やundefinedの場合に、代わりの値を使用することができます。

これにより、エラーを回避し、より堅牢なコードを書くことができるのです。

次の章では、オブジェクトと配列における分割代入でのデフォルト値の設定方法について、具体的なサンプルコードを交えながら解説していきます。

実際にコードを書いて試してみることで、理解が深まるはずです。一緒に、JavaScriptの応用的な機能を使いこなせるようになりましょう!

●オブジェクトの分割代入でデフォルト値を設定する

前章では、分割代入の基本的な使い方とデフォルト値の必要性について解説してきました。

ここでは、いよいよオブジェクトの分割代入でデフォルト値を設定する方法について、具体的なサンプルコードを交えながら解説していきます。

JavaScriptを学び始めて半年ほどの皆さんにとって、オブジェクトの分割代入は少しわかりにくい部分があるかもしれません。

一緒に、ステップバイステップで理解を深めていきましょう。

○サンプルコード1:オブジェクトのプロパティにデフォルト値を設定

まずは、シンプルなオブジェクトを使って、プロパティにデフォルト値を設定する方法を見ていきましょう。

const user = {
  name: '山田太郎',
  age: 25
};

const { name, age, gender = '不明' } = user;

console.log(name);   // '山田太郎'
console.log(age);    // 25
console.log(gender); // '不明'

このコードでは、userオブジェクトからnameageを抽出しています。

また、genderプロパティはuserオブジェクトに存在しませんが、デフォルト値として'不明'を設定しています。

実行結果を見ると、nameageuserオブジェクトから抽出された値が出力されています。

一方、genderuserオブジェクトに存在しないため、デフォルト値の'不明'が出力されています。

このように、分割代入の際にプロパティにデフォルト値を設定することで、オブジェクトにプロパティが存在しない場合でも、エラーを回避し、適切な値を割り当てることができるのです。

○サンプルコード2:ネストされたオブジェクトでデフォルト値を設定

次に、ネストされたオブジェクトでデフォルト値を設定する方法を見ていきましょう。

const user = {
  name: '山田太郎',
  age: 25,
  address: {
    city: '東京'
  }
};

const { name, age, address: { city, zip = '000-0000' } } = user;

console.log(name); // '山田太郎'
console.log(age);  // 25
console.log(city); // '東京'
console.log(zip);  // '000-0000'

このコードでは、userオブジェクトからnameageaddressオブジェクト内のcityzipを抽出しています。

zipプロパティはuser.addressオブジェクトに存在しませんが、デフォルト値として'000-0000'を設定しています。

実行結果を見ると、nameagecityuserオブジェクトから抽出された値が出力されています。

一方、zipuser.addressオブジェクトに存在しないため、デフォルト値の'000-0000'が出力されています。

ネストされたオブジェクトでも、デフォルト値を設定することができるのです。

これにより、より複雑な構造のオブジェクトに対しても、柔軟に分割代入を適用できます。

●配列の分割代入でデフォルト値を設定する

オブジェクトの分割代入でデフォルト値を設定する方法について理解が深まってきたところで、今度は配列の分割代入でデフォルト値を設定する方法について見ていきましょう。

配列の分割代入は、オブジェクトの分割代入とは少し異なる構文を使用します。

でも、心配はいりません。ステップバイステップで学んでいけば、きっと理解できるはずです。

一緒に、JavaScriptのスキルを向上させていきましょう。

○サンプルコード3:配列の要素にデフォルト値を設定

まずは、配列の要素にデフォルト値を設定する方法から見ていきましょう。

const colors = ['red', 'green'];

const [color1, color2, color3 = 'blue'] = colors;

console.log(color1); // 'red'
console.log(color2); // 'green'
console.log(color3); // 'blue'

このコードでは、colors配列から要素を抽出し、color1color2color3に割り当てています。

color3に対応する要素はcolors配列に存在しませんが、デフォルト値として'blue'を設定しています。

実行結果を見ると、color1color2にはcolors配列の要素が割り当てられ、color3にはデフォルト値の'blue'が割り当てられています。

このように、配列の分割代入でも、要素が存在しない場合にデフォルト値を設定することができるのです。

これにより、配列の要素数が不足している場合でも、エラーを回避し、適切な値を割り当てることができます。

○サンプルコード4:残余要素にデフォルト値を設定

次に、残余要素(Rest Parameters)にデフォルト値を設定する方法について見ていきましょう。

const numbers = [1, 2];

const [num1, num2, ...rest = [3, 4]] = numbers;

console.log(num1);  // 1
console.log(num2);  // 2
console.log(rest);  // [3, 4]

このコードでは、numbers配列から要素を抽出し、num1num2に割り当てています。

残りの要素は、残余要素restに割り当てられます。

restにはデフォルト値として[3, 4]を設定しています。

実行結果を見ると、num1num2にはnumbers配列の要素が割り当てられ、restにはデフォルト値の[3, 4]が割り当てられています。

残余要素を使用することで、配列の一部の要素を個別の変数に割り当て、残りの要素を別の配列として扱うことができます。

そして、残余要素にデフォルト値を設定することで、元の配列の要素数が不足している場合でも、適切な値を割り当てることができるのです。

●関数の引数での分割代入とデフォルト値

さて、ここまでオブジェクトと配列における分割代入でのデフォルト値の設定方法について学んできましたが、いよいよ最終章に近づいてきました。

ここでは、関数の引数での分割代入とデフォルト値の設定について見ていきましょう。

関数の引数で分割代入を使用することで、関数呼び出し時に渡されるオブジェクトや配列から、必要なプロパティや要素を直接変数に割り当てることができます。

そして、デフォルト値を設定することで、引数が渡されなかった場合やundefinedだった場合に、適切な値を割り当てることができるのです。

○サンプルコード5:関数の引数でデフォルト値を設定

では早速、関数の引数で分割代入とデフォルト値を設定する方法を見ていきましょう。

function introduce({ name = '名無し', age = 20 } = {}) {
  console.log(`私の名前は${name}で、年齢は${age}歳です。`);
}

introduce({ name: '山田太郎', age: 25 }); // '私の名前は山田太郎で、年齢は25歳です。'
introduce({ name: '鈴木花子' });          // '私の名前は鈴木花子で、年齢は20歳です。'
introduce();                              // '私の名前は名無しで、年齢は20歳です。'

このコードでは、introduce関数の引数で分割代入を使用しています。

引数として渡されるオブジェクトからnameageプロパティを抽出し、それぞれデフォルト値を設定しています。

また、引数自体にもデフォルト値として空のオブジェクト{}を設定しています。

実行結果を見ると、引数にオブジェクトを渡した場合は、そのオブジェクトのプロパティが使用されています。

一部のプロパティが欠けている場合は、デフォルト値が適用されています。

そして、引数を渡さなかった場合は、引数全体のデフォルト値である空のオブジェクトが使用され、nameageにはそれぞれのデフォルト値が割り当てられています。

●よくあるエラーと対処法

分割代入は非常に便利な機能ですが、時として思わぬエラーに遭遇することがあります。

特に、JavaScriptを学び始めたばかりの頃は、エラーメッセージを見ても何が原因なのかわからず、戸惑ってしまうことも多いのではないでしょうか。

エラーは誰にでも起こり得るものですし、エラーから学ぶことも多いのです。

ここでは、分割代入を使用する際によくあるエラーとその対処法について見ていきましょう。

エラーに立ち向かう勇気を持って、一緒に乗り越えていきましょう!

○未定義のプロパティにアクセスする場合

分割代入でよく遭遇するエラーの1つが、未定義のプロパティにアクセスしようとした場合です。

例えば、次のようなコードを見てみましょう。

const user = {
  name: '山田太郎',
  age: 25
};

const { name, age, gender } = user;
console.log(gender); // undefined

このコードでは、userオブジェクトに存在しないgenderプロパティを分割代入しようとしています。

そのため、gender変数にはundefinedが割り当てられます。

未定義のプロパティにアクセスする場合、エラーは発生しませんが、予期しない結果になることがあります。

これを防ぐには、次のようにデフォルト値を設定するのが有効です。

const { name, age, gender = '不明' } = user;
console.log(gender); // '不明'

このように、デフォルト値を設定することで、プロパティが存在しない場合でも適切な値を割り当てることができます。

○配列の要素数が不足している場合

配列の分割代入でも、要素数が不足している場合に思わぬ結果になることがあります。

次のコードを見てみましょう。

const numbers = [1, 2];
const [a, b, c] = numbers;

console.log(a); // 1
console.log(b); // 2
console.log(c); // undefined

このコードでは、numbers配列の要素数が不足しているため、c変数にはundefinedが割り当てられています。

これを防ぐには、やはりデフォルト値を設定するのが有効です。

const [a, b, c = 0] = numbers;

console.log(a); // 1
console.log(b); // 2
console.log(c); // 0

このように、デフォルト値を設定することで、配列の要素数が不足している場合でも適切な値を割り当てることができます。

●分割代入のデフォルト値設定のベストプラクティス

皆さん、ここまで分割代入とデフォルト値について一緒に学んできましたね。

ここでは、分割代入のデフォルト値設定のベストプラクティスについて見ていきましょう。

ベストプラクティスを身につけることで、より読みやすく、保守性の高いコードを書くことができます。

エンジニアとしてのスキルアップを目指す皆さんには、ぜひ習得していただきたいテクニックです。

○わかりやすい変数名を使う

分割代入を使用する際は、わかりやすい変数名を使うことが大切です。

変数名は、その変数の役割や目的を明確に表すものを選びましょう。

例えば、次のようなコードを見てみましょう。

const { n, a, g } = user;

このコードでは、nagという変数名が使われていますが、これだけでは何を表しているのかわかりにくいですよね。

代わりに、次のように変数名を付けると読みやすくなります。

const { name, age, gender } = user;

このように、変数名は省略せずに、できるだけ明確で意味のある名前を付けるようにしましょう。

○デフォルト値は最後に指定する

分割代入でデフォルト値を設定する際は、デフォルト値を最後に指定するのがベストプラクティスです。

これにより、コードの読みやすさが向上します。

例えば、次のようなコードを見てみましょう。

const { name = '名無し', age, gender } = user;

このコードでは、nameプロパティにデフォルト値が設定されていますが、最後に指定されていないため、少し読みにくくなっています。

代わりに、次のように書くと読みやすくなります。

const { age, gender, name = '名無し' } = user;

このように、デフォルト値を最後に指定することで、どのプロパティにデフォルト値が設定されているのかが一目でわかるようになります。

○nullishコアレシング演算子(??)の活用

ECMAScript 2020(ES11)で導入されたnullishコアレシング演算子(??)は、分割代入のデフォルト値設定で非常に役立ちます。

この演算子は、左辺の値がnullまたはundefinedの場合に、右辺の値を返します。

例えば、次のようなコードを見てみましょう。

const { name, age, gender = null } = user;
console.log(gender ?? '不明'); // 'null'の場合、'不明'が出力されます。

分割代入によって gender という定数が null に初期化された場合、?? 演算子は右辺の '不明' を返します。

そのため、この例では '不明' が表示されます。

まとめ

お疲れ様でした。

JavaScriptの応用的な機能を使いこなせるようになることは、エンジニアとしてのスキルアップに直結します。

分割代入とデフォルト値の設定は、そのための重要なステップの1つです。

この記事で学んだ知識を活かして、実際のプロジェクトでも積極的に活用していきましょう。