JavaScript入門 練習問題 70:構文:オブジェクトのスプレッド展開
📊 Qraftユーザーの成績
- 難易度 Bランク(レーティング1200)
- 難易度 766位/2795問中
- 正答率 —(0回)
次のコードを実行したときのコンソールへの出力として正しいものはどれですか?
```javascript
const defaults = { theme: 'light', size: 'M' };
const userConfig = { size: 'L', font: 'Arial' };
const finalConfig = { ...defaults, ...userConfig };
console.log(finalConfig.size);
```
- 文字列の `'L'` が出力される。
- 文字列の `'M'` が出力される。
- 配列 `['M', 'L']` が出力される。
- エラーが発生して処理が止まる。
- `undefined` が出力される。
正解と解説を見る
スプレッド構文で複数のオブジェクトを結合する際、同じプロパティ名が存在する場合は後に記述したオブジェクトの値で上書きされるため、正解は 'L' となります。
【正解の理由】
`...defaults`によってまず `{ theme: 'light', size: 'M' }` が展開されますが、その直後に `...userConfig` が展開されます。両方のオブジェクトに `size` というキーが存在するため、後から展開された `userConfig` の値 `'L'` によって `defaults` の `'M'` が上書きされます。
【不正解の理由】
• 「文字列の `'M'` が出力される。」という説明は誤り。先に記述された値は、後の値によって上書きされるため残らない
• 「配列 `['M', 'L']` が出力される。」という説明は誤り。値が自動的に配列としてまとめられる機能はない
• 「エラーが発生して処理が止まる。」という説明は誤り。プロパティ名の重複はエラーにはならず、安全に上書きされる
• 「`undefined` が出力される。」という説明は誤り。sizeプロパティは結合後のオブジェクトに明確に存在している