39
39
40
40
## 모던 자바스크립트가 다루는 개념
41
41
42
- [ Rest Parameters ] ( #rest-parameters )
42
+ [ Spread Syntax ] ( #spread-syntax )
43
43
44
44
[ Destructuring Assignment] ( #destructuring-assignment )
45
45
46
+ [ Rest Parameters] ( #rest-parameters )
47
+
48
+ [ Rest Elements] ( #rest-elements )
49
+
46
50
[ Default Parameter] ( #default-parameter )
47
51
48
52
[ Named Parameter] ( #named-parameter )
@@ -73,61 +77,76 @@ Object.keys
73
77
74
78
---
75
79
76
- # Rest Parameters
80
+ # Spread Syntax
77
81
78
82
### 정의
79
83
80
- Rest Parameters 는 정해지지 않은 수 매개변수를 ** 실제 배열 ** 로 나타낼 수 있게 합니다 .
84
+ Spread Syntax 는 특정 객체 혹은 배열의 나머지 요소들을 어떤 객체 혹은 배열 리터럴에 풀어 놓습니다 .
81
85
82
- ## 1. 나머지 매개변수 예시
86
+ ### 특징
83
87
84
- 👉 시나리오: 개수가 정해지지 않은 매개변수를 입력 받아 이의 총 합을 구하는 함수를 작성하세요.
88
+ Spread Syntax 로 새로운 변수가 선언되지 않습니다.
89
+
90
+ ## 1. 배열 전개구문
91
+
92
+ ## 활용 1: 안전한 복사
93
+
94
+ 👉 시나리오: ` arr1 ` 과 똑같은 ` arr2 ` 를 만드세요.
95
+
96
+ 👉 조건: ` arr1 ` 의 변형이 ` arr2 ` 에 영향을 미치지 않게 하세요.
85
97
86
98
### 불—편
87
-
99
+
88
100
``` js
89
- function sum (a , b , ... y , z ) {
90
- return a + b + ... + y + z
91
- } // [a-z] 까지 입력받을 수 있습니다. 즉 매개변수의 개수가 정해져 있습니다. 👎
92
-
93
- console .log (sum (1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 )) // [i-z] 까지 undefined, 때문에 NaN 출력 👎
101
+ const arr1 = [1 , 2 , 3 ]
102
+ const arr2 = arr1 // arr2 는 arr1 를 참조합니다.
103
+
104
+ arr1 .push (4 )
105
+
106
+ console .log (arr1) // -> [ 1, 2, 3, 4 ]
107
+ console .log (arr2) // -> [ 1, 2, 3, 4 ] arr2 까지 변형됐습니다. 👎
94
108
```
95
109
96
110
### 편—안 ✅
97
111
98
112
``` js
99
- function sum (... params ) {
100
- return params .reduce ((prev , curr ) => prev + curr)
101
- } // 매개변수가 몇 개든 합을 잘 구합니다.
113
+ const arr1 = [1 , 2 , 3 ]
114
+ const arr2 = [... arr1] // arr1 를 구조 분해시켜 '새로운' 배열을 만듭니다. 👍
102
115
103
- console .log (sum (1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 )) // -> 55 👍
116
+ arr1 .push (4 )
117
+
118
+ console .log (arr1) // -> [ 1, 2, 3, 4 ]
119
+ console .log (arr2) // -> [ 1, 2, 3 ] 👍
104
120
```
105
121
106
- ## 2. 또 다른 나머지 매개변수 예시
122
+ ## 2. 객체 전개구문
107
123
108
- 👉 시나리오: 첫번째 매개변수와 나머지 매개변수를 곱한 배열을 반환하는 함수를 작성하세요.
124
+ ## 활용 1: 안전한 객체 얕은 병합
109
125
110
- ### 편—안 ✅
126
+ 👉 시나리오: 주어진 ` obj1 ` 에 ` obj2 ` 를 병합하세요.
127
+
128
+ 👉 조건1: 중복 필드가 있다면 ` obj2 ` 의 값으로 덮어씌우세요.
129
+
130
+ 👉 조건2: 주어진 객체를 변형하지 마세요.
131
+
132
+ ### 불—편
111
133
112
134
``` js
113
- function multiply (multiplier , ... params ) {
114
- return params .map (param => multiplier * param)
115
- }
135
+ const obj1 = { a: 1 , b: 1 }
136
+ const obj2 = { b: 2 , c: 2 }
116
137
117
- console .log (multiply (5 , 1 , 2 , 3 , 4 )) // -> [ 5, 10, 15, 20 ] 👍
138
+ // 나쁘지 않습니다만 obj1 이 수정됩니다. 👎
139
+ const merged = Object .assign (obj1, obj2)
118
140
```
119
141
120
- ## 3. arguments 와 다른점
121
-
122
- ` arguments ` 는 유사 배열입니다. 때문에 ` map, reduce, forEach ` 와 같은 배열 메소드를 호출 할 수 없습니다.
142
+ ### 편—안 ✅
123
143
124
144
``` js
125
- function sum (a , b , c ) {
126
- // -> TypeError: arguments.reduce is not a function
127
- return arguments .reduce ((prev , curr ) => prev + curr)
128
- }
145
+ const obj1 = { a: 1 , b: 1 }
146
+ const obj2 = { b: 2 , c: 2 }
129
147
130
- sum (1 , 2 , 3 )
148
+ // 모든 조건을 만족하며 심플합니다! 👍
149
+ const merged = { ... obj1, ... obj2 }
131
150
```
132
151
133
152
---
@@ -142,7 +161,7 @@ sum(1, 2, 3)
142
161
143
162
객체를 구조 분해해봅시다.
144
163
145
- ### 활용 1: 기본값 할당
164
+ ## 활용 1: 기본값 할당
146
165
147
166
👉 시나리오: ` me ` 객체를 출력하세요.
148
167
@@ -197,66 +216,123 @@ console.log('자동차', car)
197
216
198
217
배열을 구조 분해해봅시다.
199
218
200
- ### 활용 1: 안전한 복사
219
+ ---
201
220
202
- 👉 시나리오: ` arr1 ` 과 똑같은 ` arr2 ` 를 만드세요.
221
+ # Rest Parameters
203
222
204
- 👉 조건: ` arr1 ` 의 변형이 ` arr2 ` 에 영향을 미치지 않게 하세요.
223
+ ### 정의
205
224
206
- ### 불—편
225
+ Rest Parameters 는 정해지지 않은 수 매개변수를 ** 실제 배열 ** 로 나타낼 수 있게 합니다.
207
226
208
- ``` js
209
- const arr1 = [1 , 2 , 3 ]
210
- const arr2 = arr1 // arr2 는 arr1 를 참조합니다.
227
+ ## 1. 나머지 매개변수 예시
211
228
212
- arr1 . push ( 4 )
229
+ 👉 시나리오: 개수가 정해지지 않은 매개변수를 입력 받아 이의 총 합을 구하는 함수를 작성하세요.
213
230
214
- console .log (arr1) // -> [ 1, 2, 3, 4 ]
215
- console .log (arr2) // -> [ 1, 2, 3, 4 ] arr2 까지 변형됐습니다. 👎
231
+ ### 불—편
232
+
233
+ ``` js
234
+ function sum (a , b , ... y , z ) {
235
+ return a + b + ... + y + z
236
+ } // [a-z] 까지 입력받을 수 있습니다. 즉 매개변수의 개수가 정해져 있습니다. 👎
237
+
238
+ console .log (sum (1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 )) // [i-z] 까지 undefined, 때문에 NaN 출력 👎
216
239
```
217
240
218
241
### 편—안 ✅
219
242
220
243
``` js
221
- const arr1 = [1 , 2 , 3 ]
222
- const arr2 = [... arr1] // arr1 를 구조 분해시켜 '새로운' 배열을 만듭니다. 👍
223
-
224
- arr1 .push (4 )
244
+ function sum (... params ) {
245
+ return params .reduce ((prev , curr ) => prev + curr)
246
+ } // 매개변수가 몇 개든 합을 잘 구합니다.
225
247
226
- console .log (arr1) // -> [ 1, 2, 3, 4 ]
227
- console .log (arr2) // -> [ 1, 2, 3 ] 👍
248
+ console .log (sum (1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 )) // -> 55 👍
228
249
```
229
250
230
- ### 활용 2: 또 다른 안전한 복사
251
+ ## 2. 또 다른 나머지 매개변수 예시
231
252
232
- 👉 시나리오: 주어진 ` fruits ` 배열을 이용해 첫번째 과일과 나머지 과일을 출력하세요 .
253
+ 👉 시나리오: 첫번째 매개변수와 나머지 매개변수를 곱한 배열을 반환하는 함수를 작성하세요 .
233
254
234
- ### 불—편
255
+ ### 편—안 ✅
235
256
236
257
``` js
237
- const fruits = [' 🍎' , ' 🍌' , ' 🥝' ]
258
+ function multiply (multiplier , ... params ) {
259
+ return params .map (param => multiplier * param)
260
+ }
261
+
262
+ console .log (multiply (5 , 1 , 2 , 3 , 4 )) // -> [ 5, 10, 15, 20 ] 👍
263
+ ```
238
264
239
- // apple 과 rest 는 fruits 를 참조합니다.
240
- const apple = fruits .shift () // fruits 의 첫번째 원소를 제거하고, apple 에 할당
241
- const rest = fruits
265
+ ## 3. arguments 와 다른점
242
266
243
- console .log (' 첫번째 과일' , apple) // -> 🍎
244
- console .log (' 나머지 과일' , ... rest) // -> 🍌 🥝
267
+ ` arguments ` 는 유사 배열입니다. 때문에 ` map, reduce, forEach ` 와 같은 배열 메소드를 호출 할 수 없습니다.
245
268
246
- console .log (fruits) // -> [ '🍌', '🥝'] fruits 배열이 변형됨 👎
269
+ ``` js
270
+ function sum (a , b , c ) {
271
+ // -> TypeError: arguments.reduce is not a function
272
+ return arguments .reduce ((prev , curr ) => prev + curr)
273
+ }
274
+
275
+ sum (1 , 2 , 3 )
247
276
```
248
277
278
+ ---
279
+
280
+
281
+ # Rest Elements
282
+
283
+ ### 정의
284
+
285
+ Rest Elements 는 객체나 배열의 나머지 요소들을 선언과 동시에 할당합니다.
286
+
287
+ ### 특징
288
+
289
+ 나머지 요소에서 명시한 변수명이 선언되는 효과를 가지며 구조 분해 할당과 함께 사용 시 맨 마지막에 한 번만 위치할 수 있습니다.
290
+
291
+ ## 활용 1: 배열 나머지 요소
292
+
293
+ 👉 시나리오: ` arr ` 배열의 첫번째 요소를 ` first ` 에 할당하고 나머지 요소를 ` rest ` 에 풀어 넣으세요.
294
+
249
295
### 편—안 ✅
250
296
251
297
``` js
252
- const fruits = [' 🍎' , ' 🍌' , ' 🥝' ]
298
+ const arr = [1 , 2 , 3 , 4 , 5 ]
299
+ const [first , ... rest ] = arr
300
+
301
+ console .log (first) // -> 1
302
+ console .log (rest) // -> [ 2, 3, 4, 5 ] 👍
303
+ ```
304
+
305
+ ## 활용 2: 객체 나머지 요소
306
+
307
+ 👉 시나리오: ` me ` 객체의 ` name ` 필드만 ` name ` 에 할당하고 나머지 요소를 ` rest ` 에 풀어 넣으세요.
308
+
309
+ ### 불—편
310
+
311
+ ``` js
312
+ const me = {
313
+ name: ' 손당근' ,
314
+ hobby: ' 산책' ,
315
+ location: ' earth'
316
+ }
253
317
254
- const [apple , ... rest ] = fruits // 배열을 구조 분해시켜 apple 과 rest 가 fruits 를 참조하지 않도록 해줍니다.
318
+ // 더 심플하게 안될까요?
319
+ const name = me .name
320
+ const rest = {
321
+ hobby: me .hobby ,
322
+ location: me .location
323
+ }
324
+ ```
325
+
326
+ ### 편—안 ✅
255
327
256
- console .log (' 첫번째 과일' , apple) // -> 🍎
257
- console .log (' 나머지 과일' , ... rest) // -> 🍌 🥝
328
+ ``` js
329
+ const me = {
330
+ name: ' 손당근' ,
331
+ hobby: ' 산책' ,
332
+ location: ' earth'
333
+ }
258
334
259
- console . log (fruits) // -> [ '🍎', '🍌', '🥝' ] fruits 배열 변형 안됨 👍
335
+ const { name , ... rest } = me // 👍
260
336
```
261
337
262
338
---
@@ -267,7 +343,7 @@ console.log(fruits) // -> [ '🍎', '🍌', '🥝' ] fruits 배열 변형 안됨
267
343
268
344
Default Parameter 는 매개변수에 기본 값을 할당합니다.
269
345
270
- ## 1. 매개변수 기본 값
346
+ ## 활용1: 매개변수 기본 값
271
347
272
348
👉 시나리오: 이름 그리고 나이를 출력하는 함수 ` aboutMe ` 를 작성하세요.
273
349
@@ -360,7 +436,7 @@ aboutMe({}) // -> 비공개 비공개 ... 둘 다 '비공개' 로 출력 가능
360
436
361
437
Named Parameter 는 매개변수에 이름을 지정해줍니다.
362
438
363
- ### 활용1: 선택적 매개변수
439
+ ## 활용1: 선택적 매개변수
364
440
365
441
👉 시나리오: 나이와 직업을 매개변수로 받고 출력하는 함수 ` aboutMe ` 를 작성하세요.
366
442
@@ -395,7 +471,7 @@ aboutMe({ age: 20 }) // -> 나이 20
395
471
aboutMe ({ job: ' 개발자' }) // -> 직업 개발자
396
472
```
397
473
398
- ### 활용2: 순서 없는 매개변수
474
+ ## 활용2: 순서 없는 매개변수
399
475
400
476
매개변수가 3개 이상이면 순서를 잘못 입력할 가능성이 큽니다.
401
477
@@ -459,7 +535,7 @@ render({
459
535
460
536
` NaN `
461
537
462
- ### 활용 1: 배열이 비어있나 확인하기
538
+ ## 활용 1: 배열이 비어있나 확인하기
463
539
464
540
배열은 ` length ` 프로퍼티를 가지고 있습니다. 이를 검사해 배열이 비어있는지 확인 가능합니다.
465
541
@@ -483,7 +559,7 @@ if (!arr.length) { // 👍 좋습니다! 0 은 Falsy 기 때문에 배열이 비
483
559
}
484
560
```
485
561
486
- ### 활용 2: 안전히 메소드 호출하기
562
+ ## 활용 2: 안전히 메소드 호출하기
487
563
488
564
존재하지 않는 함수를 호출하면 ` TypeError: ... is not a function ` 를 ` throw ` 합니다.
489
565
@@ -511,7 +587,7 @@ if (iAmNotArray.forEach) {
511
587
512
588
위에서 언급한 거짓 값을 제외하면 모두 참 값입니다.
513
589
514
- ### 활용1: 객체 요소 검사
590
+ ## 활용1: 객체 요소 검사
515
591
516
592
` movie ` 객체를 참조해 <아이언맨> 이 한글 자막을 지원하는지 확인해 봅시다.
517
593
0 commit comments