제어문은 블록문, 조건문, 반복문 , break문 이 있다.
- 블록문
- 0개 이상의 문을 중괄호로 묶은것 (코드 블록)
- 자바스크립트는 블록문을 하나의 실행 단위로 취급
- 블록문은 단독으로 사용할 수도 있으나 일반적으로 제어문이나 함수를 정의할 때 사용하는 것이 일반적이다.
- 블록문의 끝에는 세미콜론을 붙이지 않는다. (블록문은 자체종결성을 갖고있기 때문이다.)
// 블록문
{ var foo = 10; }
// 제어문
var x = 1; if (x < 10) { x++; }
// 함수 선언문
function sum(a , b) { return a + b; }
- 조건문
- 주어진 조건식의 평가 결과에 따라 코드 블록(블록문)의 실행을 결정한다.
- 조건식은 불리언 값으로 평가될 수 있는 표현식이다.
- 자바스크립트는 if…else 문과 switch 문으로 두가지 조건문을 제공한다.
- If…else
- 주어진 조건식의 논리적 참.거짓에 따라 실행할 코드블록을 결정한다.
- 평가 결과가 참(true)일 경우 if문을 실행하고 거짓(false)일 경우 else문의 코드블럭을 실행한다.
- else if 문과 else 문은 옵션이다. 사용할 수도 있고 사용하지 않을 수도 있다.
- 코드 블록 내의 문이 하나라면 중괄호 생략가능하다.
- 삼항 연산자로 바꿀 수 있다.
- 삼항 연산자는 변수에 할당 가능하고 if..else는 불가능하다.
if (조건식1) { // 조건식1이 참이면 이 코드 블록이 실행된다. }.
else if (조건식2) { // 조건식2가 참이면 이 코드 블록이 실행된다. } else { // 조건식1과 조건식2가 모두 거짓이면 이 코드 블록이 실행된다. }
- 반복문
// switch 문
- 조건이 많은 경우 switch가 if…else 보다 가독성이 좋은 경우 잘 판단해서 사용
2.사용시 반드시 break , default 해줘야한다
- Break를 해주지않으면 swich문을 탈출하지않고 swich문이 끝날때 까지 모든 case문과 default문을 실행한다
- 위에 내용이 폴스루 이다.
switch (표현식) { case 표현식1: switch 문의 표현식과 표현식1이 일치하면 실행될 문; break; case 표현식2: switch 문의 표현식과 표현식2가 일치하면 실행될 문; break; default: switch 문의 표현식과 일치하는 case 문이 없을 때 실행될 문; }
// while 문
- 주어진 조건식의 평가 결과가 참이면 코드 블록을 계속해서 반복 실행한다.
- 조건식의 평가 결과가 거짓이면 코드 블록을 실행하지 않고 종료한다.
- 조건식의 평가 결과가 불리언 값이 아니면 불리언 값으로 강제 변환하여 참,거짓을 구별한다.
- for문은 반복 횟수가 명확할 때 주로 사용하고 while 문은 반복 횟수가 불명확할 때 주로 사용한다.
- 무한루프에서 탈출하기 위한 while문에서 break 사용 예시
var count = 0;
// 무한루프
while (true) { console . log(count); count++;
// count가 3이면 코드 블록을 탈출한다.
if (count === 3) break; } // 0 1 2
// do while 문
- do while 문은 코드 블록을 먼저 실행하고 조건식을 평가한다.
- 코드 블록은 무조건 한 번 이상 실행된다.
var count = 4; // count가 3보다 작을 때까지 코드 블록을 계속 반복 실행한다.
do { console . log(count); count++; // 4 } while (count < 4);
- break 문
- break 문은 반복문 or switch 문의 코드 블록을 탈출한다.
- 레이블문, 반복문 , switch 문의 코드 블록 외에 break 문을 사용하면 SyntaxError(문법에러)가 발생한다.
조건문에 break를 사용했을때 SyntaxError(문법에러)
if (true) { break; // Uncaught SyntaxError: Illegal break statement }
- 레이블 문
- 레이블 문은 프로그램의 실행 순서를 제어하는 데 사용한다.
- switch문의 case 문과 default 문도 레이블 문이다.
- 레이블 문을 탈출 하려면 break 문에 레이블 식별자를 지정한다
outer라는 식별자가 붙은 레이블 for문
- 중첩 for 문의 내부 for 문에서 break 문을 실행하면 내부 for문을 탈출하여 외부 for 문으로 진입한다.
outer: for (var i = 0; i < 3; i++) { for (var j = 0; j < 3; j++) {
// i + j === 3이면 outer라는 식별자가 붙은 레이블 for 문을 탈출한다.
if (i + j === 3) break outer;
console . log(inner [${i} , ${j}]); } }
console . log('Done!');
문자열 에서 특정 문자의 인덱스(위치)를 검색하는 예시
var string = 'Hello World . '; var search = 'l'; var index;
// 문자열은 유사 배열이므로 for 문으로 순회할 수 있다.
for (var i = 0; i < string.length; i++) {
// 문자열의 개별 문자가 'l'이면
if (string[i] === search) {
index = i; break; // 반복문을 탈출한다. } }
console . log(index); // 2
- continue 문
- continue 문은 반복문의 코드 블록 실행을 현 지점에서 중단하고 반복문의 증감식으로 실행 흐름을 이동시킨다.
- break 문 처럼 반목문을 탈출 하지는 않는다.
문자열에서 특정 문자의 개수를 세는 예시
var string = 'Hello World . '; var search = 'l'; var count = 0;
// 문자열은 유사 배열이므로 for 문으로 순회할 수 있다.
for (var i = 0; i < string . length; i++) {
// 'l'이 아니면 현 지점에서 실행을 중단하고 반복문의 증감식으로 이동한다.
if (string[i] !== search) continue; count++; // continue 문이 실행되면 이 문은 실행되지 않는다. }
console . log(count); // 3
// 참고로 String.prototype.match 메서드를 사용해도 같은 동작을 한다.
const regexp = new RegExp(search , 'g'); console . log(string . match(regexp) . length); // 3