JavaScript: JavaScriptのオブジェクト
最終更新:2026-10-13
オブジェクトはJavaScriptで最も重要なデータ構造です。インフォメーションカードのように考えましょう。表面には「名前:花子」、裏面には「年齢:20」と書かれています。各情報にはキーと値があり、キーと値のペアを形成します。
1. オブジェクトの作成と操作
波括弧{}を使ってオブジェクトを直接記述します。これが最も一般的な方法です:
<script>
const student = {
name: "花子",
age: 20,
major: "コンピュータサイエンス"
};
console.log(student);
</script>
キーと値のペアはコロンで区切られ、ペアはカンマで区切られます。最後のペアの後にカンマを付けることもでき、将来の追加に便利です。
(2) プロパティへのアクセス
オブジェクトのプロパティにアクセスする2つの方法:
| 方法 | 構文 | いつ使うか |
|---|---|---|
| ドット記法 | obj.name |
プロパティ名が有効な識別子の場合 |
| ブラケット記法 | obj["name"] |
名前に特殊文字が含まれるか、変数に格納されている場合 |
ブラケット記法の最大の利点:変数をキーとして使用できることです。
<script>
const key = "name";
console.log(student[key]); // student["name"]と同じ
</script>
(3) プロパティの変更と追加
オブジェクト作成後、いつでも既存のプロパティを変更したり、新しいプロパティを追加したりできます。constで宣言されたオブジェクトでも可能です(constは参照をロックし、内容はロックしない)。
<script>
student.age = 21; // 変更
student.grade = "3年生"; // 新しいプロパティを追加
console.log(student);
</script>
(4) プロパティの削除
delete演算子でプロパティを完全に削除します:
<script>
delete student.grade;
console.log(student);
</script>
削除後、そのプロパティにアクセスするとundefinedを返します。
(5) メソッド
オブジェクト内の関数はメソッドと呼ばれます。関数がプロパティの値になると、オブジェクトが「行動」できるようになります:
<script>
const dog = {
name: "レックス",
bark() {
return "ワン!僕は" + this.name;
}
};
console.log(dog.bark());
</script>
(6) thisキーワード
thisは「現在のオブジェクト」を指します。メソッドを呼び出したのが誰かで、thisがそのオブジェクトになります。これはJavaScriptのもっとも厄介な概念の一つで、メソッドを抽出して別に呼び出すと、thisは元のオブジェクトを指さなくなります。
<script>
const bark = dog.bark;
console.log(bark()); // thisはdogを指さない — windowまたはundefinedになる可能性
</script>
(7) コンストラクタ
同じ構造の複数のオブジェクトを一括作成する必要がある場合、コンストラクタ関数を使います:
<script>
function Person(name, age) {
this.name = name;
this.age = age;
this.sayHi = function() {
return "こんにちは、僕は" + this.name + "です";
};
}
const p1 = new Person("太郎", 25);
const p2 = new Person("一郎", 30);
console.log(p1.sayHi());
console.log(p2.sayHi());
</script>
newは3つのことを行います:空のオブジェクトを作成 → thisをそこに設定 → オブジェクトを返します。
(8) Object.keys / values / entries
この3つの静的メソッドは、オブジェクトのキー、値、キーと値のペアの配列を返します:
| メソッド | 戻り値 |
|---|---|
Object.keys(obj) |
["name", "age"] |
Object.values(obj) |
["花子", 20] |
Object.entries(obj) |
[["name","花子"], ["age",20]] |
オブジェクトの反復に非常に便利です:Object.keys(obj).forEach(key => ...)。
▶ サンプル:学生オブジェクトの作成と情報表示
▶ 試してみよう▶ サンプル:ドット記法とブラケット記法の比較
▶ 試してみよう▶ サンプル:プロパティの動的な追加、変更、削除
▶ 試してみよう▶ サンプル:コンストラクタとObject.keys/values/entries
▶ 試してみよう❓ よくある質問
constで宣言されたオブジェクトのプロパティは変更できますか?constは変数の参照(常に同じオブジェクトを指すことを意味する)をロックしますが、オブジェクトの内容はロックしません。プロパティの追加、変更、削除は自由に行えますが、obj = {}のように再代入はできません。"home-city"など)、または動的アクセスのために名前が変数に格納されている場合は、ブラケット記法を使う必要があります。それ以外の場合は、ドット記法がクリーンで推奨されます。newを忘れた場合どうなりますか?thisがグローバルオブジェクトを指すようになり(厳密モードではundefined)、プロパティが間違った場所に配置されるかエラーが発生します。これは古典的な落とし穴で、ES6のclass構文では自動的に処理されます。📖 まとめ
- オブジェクトは
{}で作成し、キーと値のペアでデータを格納。ドット記法とブラケット記法でアクセス - ブラケット記法は動的キーや特殊文字に使用。ドット記法がシンプルで優先
- メソッドは
thisで自身のプロパティにアクセス。thisは呼び出し元を指す - コンストラクタ関数と
newで同じ構造のオブジェクトを量産 Object.keys/values/entriesでキー、値、キーと値のペアを反復処理
📝 練習問題
title、author、yearプロパティと、"title by author, published in year"のような文字列を返すgetSummary()メソッドを持つbookオブジェクトを作成してください。- コンストラクタ
Car(brand, model, year)を書き、それを使って3台の車を作成し、Object.keysで1台の車のすべてのプロパティ名を一覧表示してください。 - 上記の車のいずれかに
drive()メソッドを動的に追加してください("brand model is driving"を返す)。呼び出して、メソッド内でthisが現在のオブジェクトを指すことを観察してください。