回答編集履歴

1

校生

2018/08/28 11:22

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -40,14 +40,6 @@
40
40
 
41
41
 
42
42
 
43
- これの恐ろしい所は、関数の引数として渡した先で、
44
-
45
- 引数のオブジェクトのプロパティの値を変えれば関数の呼び出し元でプロパティが変更されて
46
-
47
- としてオブジェクトを指定して渡した先でも勝手にオブジェクトが作り変えられてしまう事があるという点です。
48
-
49
-
50
-
51
43
  ```JavaScript
52
44
 
53
45
  var data = {name: "taro", age: 18};
@@ -62,7 +54,17 @@
62
54
 
63
55
 
64
56
 
57
+ これの恐ろしい所は、関数の引数として渡した先で、
58
+
59
+ 引数のオブジェクトのプロパティの値を変えた場合、
60
+
61
+ 関数の呼び出し元にあったはずのオブジェクトが知らぬ内に改変されるという不具合の原因になります。
62
+
63
+
64
+
65
- なのでdataには変更加えたくないんだけどなぁ…という時は下記のように使います。
65
+ dataには変更加えたくないんだけどなぁ…という時は下記のように使います。
66
+
67
+ こうしてコピーを取っておけば誰かが勝手にプロパティを書き換えても元のオブジェクトは変更されていないので安心ですね。
66
68
 
67
69
 
68
70
 
@@ -70,10 +72,28 @@
70
72
 
71
73
  var data = {name: "taro", age: 18};
72
74
 
73
- var data2 = data;
75
+ var data2 = {...data};
74
76
 
75
77
  data2.name = "jiro";
76
78
 
77
- console.log(data); // {name: "jiro", age: 18}
79
+ console.log(data); // {name: "taro", age: 18}
78
80
 
79
81
  ```
82
+
83
+
84
+
85
+ また、このコードならば下記のように簡略的な書き方も出来ます。
86
+
87
+ 2番目の使い方ですね。
88
+
89
+
90
+
91
+ ```JavaScript
92
+
93
+ var data = {name: "taro", age: 18};
94
+
95
+ var data2 = {...data, name: "jiro"};
96
+
97
+ console.log(data); // {name: "taro", age: 18}
98
+
99
+ ```