diff --git a/docs/1-trial-session/11-object/_samples/add-and-view-Japanese-score/index.html b/docs/1-trial-session/11-object/_samples/add-and-view-Japanese-score/index.html new file mode 100644 index 000000000..df19d1882 --- /dev/null +++ b/docs/1-trial-session/11-object/_samples/add-and-view-Japanese-score/index.html @@ -0,0 +1,10 @@ + + + + + Title + + + + + diff --git a/docs/1-trial-session/11-object/_samples/add-and-view-Japanese-score/script.js b/docs/1-trial-session/11-object/_samples/add-and-view-Japanese-score/script.js new file mode 100644 index 000000000..710607a83 --- /dev/null +++ b/docs/1-trial-session/11-object/_samples/add-and-view-Japanese-score/script.js @@ -0,0 +1,6 @@ +const tanaka = { + name: "田中", + scores: { math: 90, science: 80 }, +}; +tanaka.scores.japanese = 50; +document.write(tanaka.scores.japanese); diff --git a/docs/1-trial-session/11-object/_samples/view-math-score/index.html b/docs/1-trial-session/11-object/_samples/view-math-score/index.html new file mode 100644 index 000000000..df19d1882 --- /dev/null +++ b/docs/1-trial-session/11-object/_samples/view-math-score/index.html @@ -0,0 +1,10 @@ + + + + + Title + + + + + diff --git a/docs/1-trial-session/11-object/_samples/view-math-score/script.js b/docs/1-trial-session/11-object/_samples/view-math-score/script.js new file mode 100644 index 000000000..d094e79a9 --- /dev/null +++ b/docs/1-trial-session/11-object/_samples/view-math-score/script.js @@ -0,0 +1,5 @@ +const tanaka = { + name: "田中", + scores: { math: 90, science: 80 }, +}; +document.write(tanaka.scores.math); diff --git a/docs/1-trial-session/11-object/array-properties.png b/docs/1-trial-session/11-object/array-properties.png new file mode 100644 index 000000000..b494977a3 Binary files /dev/null and b/docs/1-trial-session/11-object/array-properties.png differ diff --git a/docs/1-trial-session/11-object/index.md b/docs/1-trial-session/11-object/index.md index 0d91faf2e..de6db6b2f 100644 --- a/docs/1-trial-session/11-object/index.md +++ b/docs/1-trial-session/11-object/index.md @@ -10,21 +10,11 @@ import ViewSource from "@site/src/components/ViewSource"; JavaScript で扱うことのできるの種類として、これまで数値文字列論理値を扱ってきました。オブジェクトもまた、JavaScriptですが、今まで扱ってきたとは少し性質が異なります。 -オブジェクトを用いると、これまで扱ってきたような単純なを複数まとめて一つのとして扱うことができます。 +

オブジェクトを用いると、これまで扱ってきたような単純なを複数まとめて一つのとして扱うことができます。

-今まで扱ってきたような「それ以上分解できない」のことをプリミティブといい、プリミティブでない値はすべてオブジェクトです。 +## オブジェクトの作成 -![値の種類・オブジェクト付き](./value-types-with-object.drawio.svg) - -:::tip ほかの言語の経験者へ - -JavaScript のオブジェクトは、ほかの言語でいう**辞書**や**連想配列**、**Map** に近いものです。ただ、こういったものと比べ、JavaScript のオブジェクトは使用頻度が非常に高いです。 - -::: - -## オブジェクトの作成 - -オブジェクトは、複数のプロパティと呼ばれるを持ちます。プロパティにはそれぞれ名前がついています。プロパティの名前には文字列しか指定できませんが、プロパティとしては JavaScript で使用できるすべてのが使用可能です。 +

オブジェクトは、複数のプロパティと呼ばれるを持ちます。プロパティにはそれぞれ名前がついています。プロパティの名前には文字列しか指定できませんが、プロパティとしては JavaScript で使用できるすべてのが使用可能です。

```javascript const person = { name: "田中", age: 18 }; @@ -32,6 +22,12 @@ const person = { name: "田中", age: 18 }; ![プロパティ](properties.png) +:::tip ほかの言語の経験者へ + +JavaScript のオブジェクトは、ほかの言語でいう**辞書**や**連想配列**、**Map** に近いものです。ただ、こういったものと比べ、JavaScript のオブジェクトは使用頻度が非常に高いです。 + +::: +

オブジェクトの中にオブジェクトを入れることもできます。

```javascript @@ -56,8 +52,91 @@ person.age += 1; document.write(person.age); ``` +:::tip プロパティの追加 +プロパティは取得や変更のほかに、追加もできます。 + +```javascript +person.favoriteFood = "餃子"; +document.write(person.favoriteFood); // 餃子 +``` + +::: + +:::note オブジェクトとプリミティブ + +この章よりも前に扱ってきたような「それ以上分解できない」のことをプリミティブといい、プリミティブでない値はすべてオブジェクトです。 + +![値の種類](./value-types-with-object.drawio.svg) + +::: + +## 配列とオブジェクト + +上で説明したように、配列はプリミティブではないのでオブジェクトの一種です。JavaScript のオブジェクトとは、プロパティ名とプロパティ値の組の集合でした。 + +配列もこの原則に従って動作しています。次の図に示すように、配列とは、各要素のインデックスがプロパティ名になっているオブジェクトだと考えることができるのです。 + +![配列のプロパティ](./array-properties.png) + +逆に、オブジェクトも配列と同じように使用することができます。この記法を**ブラケット記法**と呼び、プログラムの動作に応じて使用したいプロパティを切り替えるのに役立ちます。 + +```javascript +const subject = "math"; // ここを変えると表示される教科が変わる +const scores = { math: 90, science: 80 }; +document.write(`${subject} の点数は ${scores[subject]} です。`); // math の点数は 90 です。 +``` + +:::tip オブジェクトのプロパティ名 + +オブジェクトのプロパティ名に数値は使用できません。それではなぜ、配列の場合は `studentNames[2]` のように記述できるのでしょうか。 + +答えは単純で、文字列に変換されているからです。このため、次のプログラムは全く問題なく動作します。 + +```javascript +const studentNames = ["田中", "佐藤", "鈴木"]; +document.write(studentNames["0"]); // 田中 +``` + +::: + ## 課題 +### 初級課題 + +田中さんを表すオブジェクトを定義します。 + +```javascript +const tanaka = { + name: "田中", + scores: { math: 90, science: 80 }, +}; +``` + +1. 田中さんの算数の点数を表示してみましょう。 + +2. `scores` に国語の点数を追加して、表示してみましょう。 + + + +```javascript title="1の解答" +document.write(tanaka.scores.math); +``` + + + +```javascript title="2の解答" +tanaka.scores.japanese = 50; +document.write(tanaka.scores.japanese); +``` + + + +2では、プロパティを自分で追加しています。 + + + +### 中級課題 +

オブジェクトの一種なので、関数引数戻り値として使用できます。

`age` プロパティに 1 を加えたオブジェクトを返す関数 `incrementAge` を定義してみましょう。