Skip to content

Commit cd2820d

Browse files
authored
Merge pull request #468 from ut-code/delete-constant-from-2-2
Delete constant from 2/2 - constant and reference
2 parents 1d94c0d + e6007cf commit cd2820d

File tree

12 files changed

+16
-46
lines changed

12 files changed

+16
-46
lines changed

docs/2-browser-apps/02-constant/_samples/answer/index.html renamed to docs/2-browser-apps/02-reference/_samples/answer/index.html

File renamed without changes.

docs/2-browser-apps/02-constant/_samples/answer/script.js renamed to docs/2-browser-apps/02-reference/_samples/answer/script.js

File renamed without changes.

docs/2-browser-apps/02-constant/_samples/object-mutated-by-function/index.html renamed to docs/2-browser-apps/02-reference/_samples/object-mutated-by-function/index.html

File renamed without changes.

docs/2-browser-apps/02-constant/_samples/object-mutated-by-function/script.js renamed to docs/2-browser-apps/02-reference/_samples/object-mutated-by-function/script.js

File renamed without changes.

docs/2-browser-apps/02-constant/_samples/reference/index.html renamed to docs/2-browser-apps/02-reference/_samples/reference/index.html

File renamed without changes.

docs/2-browser-apps/02-constant/_samples/reference/script.js renamed to docs/2-browser-apps/02-reference/_samples/reference/script.js

File renamed without changes.
Lines changed: 7 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,12 @@
11
---
2-
title: 定数とオブジェクトの参照
2+
title: オブジェクトの参照
33
---
44

55
import CodeBlock from '@theme/CodeBlock';
66
import Term from "@site/src/components/Term";
77
import ViewSource from "@site/src/components/ViewSource";
88
import Answer from "@site/src/components/Answer";
99

10-
## 定数
11-
12-
これまで、変数の宣言には `let` キーワードを使用してきました。ところが、JavaScript の変数は、大抵初回代入以降は再代入が行われません。
13-
14-
再代入が行われない変数は `const` を用いて宣言することができます。このようにして宣言された変数を定数と呼び、定数への代入は宣言時にしか行えません。
15-
16-
```javascript
17-
// let で宣言した変数は再代入できる
18-
let variable = 1;
19-
variable = 2;
20-
21-
const constant = 1;
22-
// const で宣言した変数に再代入しようとするとエラー
23-
// constant = 2;
24-
```
25-
26-
:::tip `let``const`
27-
28-
ほとんどの場合、`const` が用いられたプログラムは `let` に書き換えても動作します。それでは、あえて `const` を用いる理由は何なのでしょうか。
29-
30-
JavaScript において、それはコードを読んだ際に読みやすいからです。`const` で定義されている変数なら、宣言文さえ見れば変数の中に入っている値を知ることができます。`const` が使用できる場所では、基本的に全て `const` を用いるようにしましょう。
31-
32-
:::
33-
34-
:::info オブジェクトと `const`
35-
36-
`const` による宣言で禁止されるのはその変数への代入だけであり、オブジェクトのプロパティへの代入はこれにあたりません。
37-
38-
```javascript
39-
const person = { name: "田中", age: 18 };
40-
person.name = "佐藤"; // OK
41-
// 変数自体への再代入はできない
42-
// person = { name: "佐藤", age: 20 };
43-
```
44-
45-
:::
46-
4710
## 参照
4811

4912
[オブジェクト](../../1-trial-session/11-object/index.md)で扱ったように、JavaScript の値はオブジェクトとプリミティブに分けられます。前回は、プリミティブを「それ以上分解できない値」のように説明しました。もう少し詳しくみてみましょう。
@@ -73,6 +36,12 @@ document.write(object1.age);
7336

7437
2 行目では、変数 `object1` に代入されている参照が `object2` にコピーされます。これにより、同じオブジェクトを参照する変数が 2 つできます。よって、`object1.age``object2.age` は同じものになるのです。
7538

39+
:::tip
40+
上で説明したように、オブジェクトを変数に代入するとき、実際に代入されているのはオブジェクトの**参照**です。
41+
そのため、`const` による宣言で禁止されるのはその変数への代入だけであり、オブジェクトのプロパティへの代入はこれにあたりません。
42+
`const`で宣言しているにもかかわらず、そのプロパティが書き換わっていることがあるので注意しましょう。
43+
:::
44+
7645
## ネストされたオブジェクト
7746

7847
オブジェクトの中に別のオブジェクトが格納されている場合を考えてみましょう。

docs/2-browser-apps/02-constant/nested-reference.drawio.svg renamed to docs/2-browser-apps/02-reference/nested-reference.drawio.svg

File renamed without changes.
File renamed without changes.

docs/4-advanced/04-react/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -750,7 +750,7 @@ export default function App() {
750750

751751
:::tip React とイミュータビリティ
752752

753-
[定数とオブジェクトの参照](../../2-browser-apps/02-constant/index.md)節で扱ったように、JavaScript オブジェクトは参照として扱われます。React では、**状態として保存されたオブジェクトの参照先への変更は許可されていません**。例えば、先ほどのプログラムの `addTodo` 関数と `removeTodo` 関数は、次のように書き換えることはできません。これは、この方法では React が状態が変化したことを検知できないからです。
753+
[オブジェクトの参照](../../2-browser-apps/02-reference/index.md)節で扱ったように、JavaScript オブジェクトは参照として扱われます。React では、**状態として保存されたオブジェクトの参照先への変更は許可されていません**。例えば、先ほどのプログラムの `addTodo` 関数と `removeTodo` 関数は、次のように書き換えることはできません。これは、この方法では React が状態が変化したことを検知できないからです。
754754

755755
```tsx
756756
const addTodo = () => {

0 commit comments

Comments
 (0)