이력
- 2021.09.30 포스팅
- 2021.11.25 사소한 수정
모든 내용을 상세히 담으려 하지 않았습니다.
제가 모르는 부분이나, “이런 것도 있었어?” 하는 부분, 중요하다고 생각되는 부분,
다시 한번 되새기고 싶은 부분만 기록했습니다.
읽어주셔서 감사합니다.
7.1 블록#
- 문장이 연속되어 글이 되듯이 자바스크립트 프로그램도 문장(Statement)가 연속된 형태이다.
- 블록 { } 은 안의 문장을 하나의 샐행단위로 묶는다,
- { 문장 리스트 }
7.2 빈 문장#
7.3 if#
- (표현식) 평가 결과에 따라 문장을 수행한다.
7.4 while#
7.5 do-while#
7.6 세미콜론 자동 삽입#
- 세미콜론은 문장을 분리할 때 사용한다.
- js는 세미콜론을 작성하지 않으면 자동으로 삽입한다. 그렇다고해서 세미콜론을 빼먹으라는건 아니다. 그저 보완하는 용도이다.
7.7 for#
1
2
3
| for (let k = 0; k < 3; k++) {
js.log(k);
}
|
1
2
3
4
5
6
7
8
9
10
| 1. k 변수를 선언하고 초깃값으로 0을 할당한다.
- for 문을 시작할 때 한 번만 수행된다.
2. (k < 3) 표현식을 평가하고 불린 값으로 변환한다.
3. 불린 변환 값이 false이면 반복을 종료한다.
4. 블록 안을 실행한다
- k++ 보다 블록안을 먼저 실행한다.
- 블록 안의 조건에 따라 for 문을 빠져나갈 수도 있다.
5. for 문으로 다시 올라온다.
6. k++ 표현식을 평가한다.
7. 2번 부터 다시 수행한다.
|
7.8 label#
7.9 break#
- break 식별자; // 이렇게 하면 식별자로 분기한다.
7.10 continue#
7.11 return#
- return (표현식)
- 표현식을 지정하지 않으면 undefined 반환
7.12 for-in#
1
2
3
4
| var sports = {soccer: 11, basketball: 5};
for (var pty in sports) {
js.log('name: ' + pty + ' value: ' + sports[pty]);
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
| 1. 처음 한 번만 변수(pty)를 선언한다.
2. for-in 문의 sports를 평가하고 값을 구한다.
- 오브젝트인지 확인하기 위함이다.
3. 구한 값이 null 또는 undefined 이면 처리를 종료한다.
4. 구한 값을 오브젝트로 변환한다.
- 만약 값이 숫자라면 Number 오브젝트로 변환한다. 다만 변환된 프로젝트에 프로퍼티가 없으므로 종료되게 된다.
5. 변환한 오브젝트를 열거한다.
6. 프로퍼티 이름을 pty 변수에 설정한다.
7. 블록 안의 문장을 수행한다.
8. break 문이 있으면 for-in loop를 종료한다.
9. continue 문이 있으면 continue 문 아래를 수행하지 않고 5번으로 이동한다.
10. 5번 부터 9번까지 반복하여 수행한다.
|
- 오브젝트 프로퍼티의 이름으로 sort되어 열거되지 않는다.
- 오브젝트에 작성한 순서로 열거 되지 않는다,
7.13 switch#
1
2
3
4
5
6
7
8
9
10
| 1. switch (표현식) 에서 표현식을 평가하여 값을 구하나.
2. 소스 텍스트에 작성한 순서로 case를 전부 추출한다.
3. 추출한 case를 읽는다.
- 더 이상 읽을 case가 없으면 default를 찾는다.
- default가 있을 때만 default를 수행하므로 작성하지 않아도 에러가 발생하지 않는다.
4. 표현식을 평가한 값과 case ㅛ현식을 평가한 값을 비교한다.
- === 연산자고 비교한다.
5. 값이 같이 않으면 3번으로 분기하여 다음 case를 읽는다.
6. 문장을 수행한다.
7. 소스 텍스트 끝까지 실행한다.
|
7.14 with#
1
2
3
4
5
| var sports = { player: '11명', time: '90분'};
with (sports) {
js.log(player);
js.log(time)
}
|
- 위와 같이 프로퍼티 이름만으로 값을 구할 수 있는데, 이를 위해서는 자바스크립트 내부에서 환경을 만들어 줘야한다. 하지만 환경을 만드는게 자바스크립트의 구조와 맞지 않아 with 사용을 권고하지 않는다.
- 원리적 설명은 “23장 스코프”, “24.8절 오브젝트 환경 레코드” 에서 한다.
7.15 try-catch-finally#
- 프로그램 실행중에 에러가 발생하면 프로그램이 중단되지만, try 블록에서는 중단되지 안는다. 따라서 에러가 발생할 가능성이 있는 코드를 try 블록에 넣으면 된다.
- 에러 발생을 미리 알 수 있는 때는 try 밖에서 처리하자.
7.16 throw#
- throw 문에서 값을 던지면 catch가 받는다.
- 별도 함수 사용 예
1
2
3
4
5
6
7
8
9
10
| function showError(name) {
throw name + '를 선언하지 않았습니다.';
}
try {
if (typeof sports == 'undefined') {
showError('sports');
}
} catch(e) {
js.log{e);
}
|
1
2
3
4
5
6
7
8
9
| 1. try 블록을 실행한다
2. sports 변수의 존재를 체크한다.
3. sports 변수가 존재하지 안으므로 showError 함수를 호출한다.
4. showError 함수가 실행된다.
5. 파라미터 name에 설정된 'sports'와 '를 선업하지 않았습니다.'를 연결한다.
6. throw 문을 수행한다.
7. catch(e) 블록이 실행된다.
8. 파라미터 e에 5번에서 조합한 문자열이 설정된다.
9. e 값을 출력한다.
|
- throw 문을 try 블록에 작성하지 않아도 된다.
7.17 debugger#