3.1 オブジェクトとは
TypeScript(およびJavaScript)における オブジェクト は、複数の値を一つにまとめたデータ構造です。
3.1.1 オブジェクトは “連想配列” である
Section titled “3.1.1 オブジェクトは “連想配列” である”オブジェクトは、名前(プロパティ名)と値のペアを保持する集合体です。他の言語では「連想配列」「辞書」「ハッシュ」などと呼ばれるものに相当します。
3.1.2 オブジェクトリテラル (1) 基本的な構文
Section titled “3.1.2 オブジェクトリテラル (1) 基本的な構文”オブジェクトを作成する最も一般的な方法は、波括弧 {} を使用するオブジェクトリテラルです。
- 記法:
{ プロパティ名: 値, ... } - 例:
const obj = { name: "indigo", age: 50 };
3.1.3 オブジェクトリテラル (2) プロパティ名の種々の指定方法
Section titled “3.1.3 オブジェクトリテラル (2) プロパティ名の種々の指定方法”プロパティ名には、識別子以外にも様々な指定方法があります。
- 文字列リテラル:
{ "name-with-hyphen": true }のように、識別子として使えない名前も指定可能です。 - 計算されたプロパティ名 (Computed property names):
[式]: 値の形式で、実行時に名前を決定できます。 - 省略記法: 変数名とプロパティ名が同じ場合、
{ name }のように省略して書くことができます。
3.1.4 プロパティアクセス:値の取得と代入
Section titled “3.1.4 プロパティアクセス:値の取得と代入”オブジェクトのプロパティを利用する方法は2つあります。
- ドット記法:
obj.name(一般的で推奨される方法) - ブラケット記法:
obj["name"](プロパティ名を動的に指定したい場合に便利)
3.1.5 オブジェクトリテラル (3) スプレッド構文
Section titled “3.1.5 オブジェクトリテラル (3) スプレッド構文”...(スプレッド構文)を使うと、既存のオブジェクトのプロパティを新しいオブジェクトにコピーできます。
- コピー:
const newObj = { ...oldObj, extra: true }; - 注意: コピーは「浅いコピー(Shallow Copy)」であり、ネストされたオブジェクトは参照が共有される点に注意が必要です。
3.1.6 オブジェクトはいつ “同じ” なのか
Section titled “3.1.6 オブジェクトはいつ “同じ” なのか”オブジェクトの比較(===)は、**参照(メモリ上の位置)**の比較で行われます。
- 同じ中身を持っていても、別々に作成されたオブジェクトは
falseと判定されます。 - 同じオブジェクトを参照している変数同士の比較のみが
trueとなります。