Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b8c6b7b

Browse files
authored
Merge pull request #5 from dangen-effy/ISSUE-4
Add: Spread Syntax, Rest Elements
2 parents c60262b + 12dbed1 commit b8c6b7b

File tree

1 file changed

+144
-68
lines changed

1 file changed

+144
-68
lines changed

README.md

Lines changed: 144 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,14 @@
3939

4040
## 모던 자바스크립트가 다루는 개념
4141

42-
[Rest Parameters](#rest-parameters)
42+
[Spread Syntax](#spread-syntax)
4343

4444
[Destructuring Assignment](#destructuring-assignment)
4545

46+
[Rest Parameters](#rest-parameters)
47+
48+
[Rest Elements](#rest-elements)
49+
4650
[Default Parameter](#default-parameter)
4751

4852
[Named Parameter](#named-parameter)
@@ -73,61 +77,76 @@ Object.keys
7377

7478
---
7579

76-
# Rest Parameters
80+
# Spread Syntax
7781

7882
### 정의
7983

80-
Rest Parameters정해지지 않은 수 매개변수를 **실제 배열**로 나타낼 수 있게 합니다.
84+
Spread Syntax특정 객체 혹은 배열의 나머지 요소들을 어떤 객체 혹은 배열 리터럴에 풀어 놓습니다.
8185

82-
## 1. 나머지 매개변수 예시
86+
### 특징
8387

84-
👉 시나리오: 개수가 정해지지 않은 매개변수를 입력 받아 이의 총 합을 구하는 함수를 작성하세요.
88+
Spread Syntax 로 새로운 변수가 선언되지 않습니다.
89+
90+
## 1. 배열 전개구문
91+
92+
## 활용 1: 안전한 복사
93+
94+
👉 시나리오: `arr1` 과 똑같은 `arr2` 를 만드세요.
95+
96+
👉 조건: `arr1` 의 변형이 `arr2` 에 영향을 미치지 않게 하세요.
8597

8698
### 불—편
87-
99+
88100
```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 까지 변형됐습니다. 👎
94108
```
95109

96110
### 편—안 ✅
97111

98112
```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 를 구조 분해시켜 '새로운' 배열을 만듭니다. 👍
102115

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 ] 👍
104120
```
105121

106-
## 2. 또 다른 나머지 매개변수 예시
122+
## 2. 객체 전개구문
107123

108-
👉 시나리오: 첫번째 매개변수와 나머지 매개변수를 곱한 배열을 반환하는 함수를 작성하세요.
124+
## 활용 1: 안전한 객체 얕은 병합
109125

110-
### 편—안 ✅
126+
👉 시나리오: 주어진 `obj1``obj2` 를 병합하세요.
127+
128+
👉 조건1: 중복 필드가 있다면 `obj2` 의 값으로 덮어씌우세요.
129+
130+
👉 조건2: 주어진 객체를 변형하지 마세요.
131+
132+
### 불—편
111133

112134
```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 }
116137

117-
console.log(multiply(5, 1, 2, 3, 4)) // -> [ 5, 10, 15, 20 ] 👍
138+
// 나쁘지 않습니다만 obj1 이 수정됩니다. 👎
139+
const merged = Object.assign(obj1, obj2)
118140
```
119141

120-
## 3. arguments 와 다른점
121-
122-
`arguments` 는 유사 배열입니다. 때문에 `map, reduce, forEach` 와 같은 배열 메소드를 호출 할 수 없습니다.
142+
### 편—안 ✅
123143

124144
```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 }
129147

130-
sum(1, 2, 3)
148+
// 모든 조건을 만족하며 심플합니다! 👍
149+
const merged = { ...obj1, ...obj2 }
131150
```
132151

133152
---
@@ -142,7 +161,7 @@ sum(1, 2, 3)
142161

143162
객체를 구조 분해해봅시다.
144163

145-
### 활용 1: 기본값 할당
164+
## 활용 1: 기본값 할당
146165

147166
👉 시나리오: `me` 객체를 출력하세요.
148167

@@ -197,66 +216,123 @@ console.log('자동차', car)
197216

198217
배열을 구조 분해해봅시다.
199218

200-
### 활용 1: 안전한 복사
219+
---
201220

202-
👉 시나리오: `arr1` 과 똑같은 `arr2` 를 만드세요.
221+
# Rest Parameters
203222

204-
👉 조건: `arr1` 의 변형이 `arr2` 에 영향을 미치지 않게 하세요.
223+
### 정의
205224

206-
### 불—편
225+
Rest Parameters 는 정해지지 않은 수 매개변수를 **실제 배열**로 나타낼 수 있게 합니다.
207226

208-
```js
209-
const arr1 = [1, 2, 3]
210-
const arr2 = arr1 // arr2 는 arr1 를 참조합니다.
227+
## 1. 나머지 매개변수 예시
211228

212-
arr1.push(4)
229+
👉 시나리오: 개수가 정해지지 않은 매개변수를 입력 받아 이의 총 합을 구하는 함수를 작성하세요.
213230

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 출력 👎
216239
```
217240

218241
### 편—안 ✅
219242

220243
```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+
} // 매개변수가 몇 개든 합을 잘 구합니다.
225247

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 👍
228249
```
229250

230-
### 활용 2: 또 다른 안전한 복사
251+
## 2. 또 다른 나머지 매개변수 예시
231252

232-
👉 시나리오: 주어진 `fruits` 배열을 이용해 첫번째 과일과 나머지 과일을 출력하세요.
253+
👉 시나리오: 첫번째 매개변수와 나머지 매개변수를 곱한 배열을 반환하는 함수를 작성하세요.
233254

234-
### 불—편
255+
### 편—안 ✅
235256

236257
```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+
```
238264

239-
// apple 과 rest 는 fruits 를 참조합니다.
240-
const apple = fruits.shift() // fruits 의 첫번째 원소를 제거하고, apple 에 할당
241-
const rest = fruits
265+
## 3. arguments 와 다른점
242266

243-
console.log('첫번째 과일', apple) // -> 🍎
244-
console.log('나머지 과일', ...rest) // -> 🍌 🥝
267+
`arguments` 는 유사 배열입니다. 때문에 `map, reduce, forEach` 와 같은 배열 메소드를 호출 할 수 없습니다.
245268

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)
247276
```
248277

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+
249295
### 편—안 ✅
250296

251297
```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+
}
253317

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+
### 편—안 ✅
255327

256-
console.log('첫번째 과일', apple) // -> 🍎
257-
console.log('나머지 과일', ...rest) // -> 🍌 🥝
328+
```js
329+
const me = {
330+
name: '손당근',
331+
hobby: '산책',
332+
location: 'earth'
333+
}
258334

259-
console.log(fruits) // -> [ '🍎', '🍌', '🥝' ] fruits 배열 변형 안됨 👍
335+
const { name, ...rest } = me // 👍
260336
```
261337

262338
---
@@ -267,7 +343,7 @@ console.log(fruits) // -> [ '🍎', '🍌', '🥝' ] fruits 배열 변형 안됨
267343

268344
Default Parameter 는 매개변수에 기본 값을 할당합니다.
269345

270-
## 1. 매개변수 기본 값
346+
## 활용1: 매개변수 기본 값
271347

272348
👉 시나리오: 이름 그리고 나이를 출력하는 함수 `aboutMe` 를 작성하세요.
273349

@@ -360,7 +436,7 @@ aboutMe({}) // -> 비공개 비공개 ... 둘 다 '비공개' 로 출력 가능
360436

361437
Named Parameter 는 매개변수에 이름을 지정해줍니다.
362438

363-
### 활용1: 선택적 매개변수
439+
## 활용1: 선택적 매개변수
364440

365441
👉 시나리오: 나이와 직업을 매개변수로 받고 출력하는 함수 `aboutMe` 를 작성하세요.
366442

@@ -395,7 +471,7 @@ aboutMe({ age: 20 }) // -> 나이 20
395471
aboutMe({ job: '개발자' }) // -> 직업 개발자
396472
```
397473

398-
### 활용2: 순서 없는 매개변수
474+
## 활용2: 순서 없는 매개변수
399475

400476
매개변수가 3개 이상이면 순서를 잘못 입력할 가능성이 큽니다.
401477

@@ -459,7 +535,7 @@ render({
459535

460536
`NaN`
461537

462-
### 활용 1: 배열이 비어있나 확인하기
538+
## 활용 1: 배열이 비어있나 확인하기
463539

464540
배열은 `length` 프로퍼티를 가지고 있습니다. 이를 검사해 배열이 비어있는지 확인 가능합니다.
465541

@@ -483,7 +559,7 @@ if (!arr.length) { // 👍 좋습니다! 0 은 Falsy 기 때문에 배열이 비
483559
}
484560
```
485561

486-
### 활용 2: 안전히 메소드 호출하기
562+
## 활용 2: 안전히 메소드 호출하기
487563

488564
존재하지 않는 함수를 호출하면 `TypeError: ... is not a function``throw` 합니다.
489565

@@ -511,7 +587,7 @@ if (iAmNotArray.forEach) {
511587

512588
위에서 언급한 거짓 값을 제외하면 모두 참 값입니다.
513589

514-
### 활용1: 객체 요소 검사
590+
## 활용1: 객체 요소 검사
515591

516592
`movie` 객체를 참조해 <아이언맨> 이 한글 자막을 지원하는지 확인해 봅시다.
517593

0 commit comments

Comments
 (0)