JavaScript入門 練習問題 71:オブジェクトのコピー(シャローコピー)
📊 Qraftユーザーの成績
- 難易度 Bランク(レーティング1200)
- 難易度 766位/2795問中
- 正答率 —(0回)
次のコードの実行結果として正しいものはどれですか?
```javascript
const obj1 = { a: 1 };
const obj2 = Object.assign({}, obj1);
obj2.a = 2;
console.log(obj1.a, obj2.a);
```
- 変数obj1とobj2のプロパティは連動するため、両方とも「2」と出力される。
- 変数obj1は元の値の「1」のままで、変数obj2は変更されて「2」と出力される。
- 別のオブジェクトのプロパティを上書きしたため、両方とも「1」と出力される。
- 代入関数は新しいプロパティを破棄する仕様のため、両方とも未定義になる。
- 定数に対するプロパティの直接的な変更操作は無効となり、実行時エラーになる。
正解と解説を見る
正解:変数obj1は元の値の「1」のままで、変数obj2は変更されて「2」と出力される。
`Object.assign`によって元のオブジェクトのプロパティを持つ新しいオブジェクトが作成されるため、コピー先を変更しても元のオブジェクトである`obj1.a`は「1」のままであり、変更された`obj2.a`だけが「2」になります。
【正解の理由】
`Object.assign({}, obj1)`は空のオブジェクトに対して`obj1`のプロパティをコピーする処理であり、作成された`obj2`はメモリ上で完全に別のオブジェクトとして扱われるため、独立して変更が可能です。
【不正解の理由】
• 「変数obj1とobj2のプロパティは連動するため、両方とも『2』と出力される」という説明は誤り。参照が異なる別のオブジェクトであるため連動しない
• 「別のオブジェクトのプロパティを上書きしたため、両方とも『1』と出力される」という説明は誤り。`obj2`への代入は成功しているため
• 「代入関数は新しいプロパティを破棄する仕様のため、両方とも未定義になる」という説明は誤り。プロパティは正常にコピーされ、代入も有効に機能する
• 「定数に対するプロパティの直接的な変更操作は無効となり、実行時エラーになる」という説明は誤り。`const`で宣言された変数でも、オブジェクトの中身(プロパティ)の変更は許可されている