teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

a

2018/04/10 04:24

投稿

HayatoKamono
HayatoKamono

スコア2415

answer CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # Object.freeze()
6
6
 
7
- [Object.freeze()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze)を使えば、オブジェクトを不変に出来ますが、以下のデモコードの通り、ネストされたオブジェクトは可変のままになります。
7
+ [Object.freeze()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze)を使えば、配列やオブジェクトを不変に出来ますが、以下のデモコードの通り、ネストされている場合は可変のままになります。
8
8
 
9
9
 
10
10
  ## 配列

2

a

2018/04/10 04:24

投稿

HayatoKamono
HayatoKamono

スコア2415

answer CHANGED
@@ -6,8 +6,30 @@
6
6
 
7
7
  [Object.freeze()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze)を使えば、オブジェクトを不変に出来ますが、以下のデモコードの通り、ネストされたオブジェクトは可変のままになります。
8
8
 
9
+
10
+ ## 配列
9
11
  ```
10
12
  // #1
13
+ const list1 = []
14
+ list1.push(1);
15
+ console.log(list1); //[ 1 ]
16
+
17
+ // #2
18
+ const list2 = [];
19
+ Object.freeze(list2);
20
+ //list2.push(2); //TypeError: Can't add property 0, object is not extensible
21
+
22
+
23
+ // #3
24
+ const list3 = [[]];
25
+ Object.freeze(list3);
26
+ list3[0].push(3);
27
+ console.log(list3); // [ [ 3 ] ]
28
+ ```
29
+
30
+ ## オブジェクト
31
+ ```
32
+ // #1
11
33
  const obj1 = {
12
34
  id: 1
13
35
  }

1

a

2018/04/10 04:21

投稿

HayatoKamono
HayatoKamono

スコア2415

answer CHANGED
@@ -4,8 +4,10 @@
4
4
 
5
5
  # Object.freeze()
6
6
 
7
+ [Object.freeze()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze)を使えば、オブジェクトを不変に出来ますが、以下のデモコードの通り、ネストされたオブジェクトは可変のままになります。
8
+
7
9
  ```
8
- //
10
+ // #1
9
11
  const obj1 = {
10
12
  id: 1
11
13
  }
@@ -13,7 +15,7 @@
13
15
  obj1.id = 2;
14
16
  console.log(obj1.id); //2
15
17
 
16
- //
18
+ // #2
17
19
  const obj2 = {
18
20
  id: 10
19
21
  }
@@ -22,7 +24,7 @@
22
24
  obj2.id = 20;
23
25
  console.log(obj2.id); //10
24
26
 
25
- //
27
+ // #3
26
28
  const obj3 = {
27
29
  id: 100,
28
30
  items: {