# 目的

すべてのもととなる"オブジェクト"について説明する

- オブジェクトとはなにか
- オブジェクトがどのように作られるか
- オブジェクトのインスタンス
- オブジェクトのインスタンスメソッド
- オブジェクトの静的メソッド

## 目的外

- prototypeオブジェクト -> 次の章
- prototypeメソッド
- prototypeチェーン

## アウトライン

- オブジェクト
- オブジェクトとは
- オブジェクトの作成方法 = インスタンスの作成
    - `Object`もオブジェクトで紛らわしい
    - `Object`から作られたオブジェクトを**オブジェクトのインスタンス**と呼ぶことにする
    - オブジェクトリテラルは`Object`を継承した**オブジェクトのインスタンス**を作る構文
- プロパティへのアクセス方法
    - プロパティの参照
        - undefinedを返す
- プロパティの更新
- プロパティの追加
- プロパティの削除
- [コラム] constで定義したオブジェクトは変更可能
- 存在しないプロパティのネストは例外を返す
- プロパティが定義済みかを確認する方法
    - undefinedとの比較
    - in演算子を使う
    - `hasOwnProperty`メソッド(インスタンスメソッド)
- Optional chaining（`?.`）でのアクセス方法
- オブジェクトの静的メソッド
    - オブジェクトのプロパティの列挙
        - `Object.keys`メソッド
        - `Object.values`メソッド
        - `Object.entries`
- オブジェクトのコピー
    - `Object.assign`
- オブジェクトのマージ
    - `Object.assign`
    - spread構文 
- まとめ
    - `Object`の提供するメソッド
    - インスタンスメソッドはどのように定義されているか -> 次の章へ
