새소식

JavaScript

[모던자바스크립트] 8.제어문

  • -

제어문

제어문을 사용하면 코드의 실행 흐름을 인위적으로 제어할 수 있다.

하지만 제어문은 코드의 흐름을 이해하기 어렵게 만들어 가독성을 해치는 단점이 있고,오류를 발생시키는 원인이 되기도 한다.

 

1.블록문

블록문은 0개 이상의 문을 중괄호로 묶은 것이다.

제어문이나 함수를 정의할 때 사용하는 것이 일반적이다.

//블록문
{
 var foo = 10;
}

//제어문
var x = i;
if(x < 10) {
  x++;
 }

//함수 선언문
function sum(a,b) {
  return a + b;
 }

 

2.조건문

2-1. if ...else 문

if(조건식){
//조건식이 참이면 코드블록 실행
} else {
 //조건식이 거짓이면 이 코드블록 실행
 }

if 문의 조건식은 불리언 값으로 평가 되어야하며, 만약 불리언값이 아닐 경우 자바스크립트 엔진에 의해 암묵적 타입 변환을 해 boolean값으로 평가된다.

 

삼항 조건 연산자로 바꿔 쓸 수 있다.

var x = 2;
var result;
if(x % 2) {
 return = "홀수";
} else { 
 return = "짝수";
}
console.log(result);

//다음과 같이 바꿔 쓸 수 있음
var result = x % 2 ? "홀수" : "짝수";

조건에 따라 단순히 값을 결정하여 변수에 할당하는 경우 if...else문 보다 삼항조건 연산자를 사용하면 가독성이 좋다.

하지만 내용이 복잡하여 여러줄의 문이 필요하면 if..else문을 사용하는 것이 가독성이 좋다.

 

 

2-2 switch 문

switch(표현식) {
  case 표현식1:
    switch 문의 표현식의 표현식1이 일치하면 실행될 문;
    break;
  case 표현식2:
    switch 문의 표현식의 표현식2이 일치하면 실행될 문;
    break;
   default;
      switch 문의 표현식과 일치하는 case문이 없을 때 실행될 문;
}

swich문의 표현식은 불리언 값보다는 문자열이나 숫자열인 경우가 많다. 

따라서 다양한 상황에 실행할 코드 블록을 결정할 때 사용한다. 

default문은 생략하는 것이 일반적이다. 

폴스루(fall through) : break를 사용하지 않으면 실행흐름이 이동하여 문을 실행하고, 문을 탈출하지 않고 모든 문을 실행하여 마지막인 default를 출력한다.

 

 

3. 반복문

  • forEach : 배열 순회시 사용
  • for..in: 객체의 프로퍼티를 열거할 떄 사용
  • for..of : ES6에서 도입된 이터러블을 순회할 수 있음

 

3-1. for문

for(;;) {...}

 

 

3-2. while 문

주어진 조건식의 평가 결과가 참이면 코드블록을 계속해서 반복실행한다. 

평가 결과가 불리언 값이 아닌경우 강제 변환하여 참, 거짓을 구별한다.

 

반복 횟수가 명확하지 않을 때 주로 사용한다. 따라서 조건식의 평가 결과가 언제나 참이면 무한루프가 된다. 무한 루프를 탈출 하기 위해서는 코드 블록 내에 if문으로 탈출 조건을 만들고 break문으로 코드 블록을 탈출한다. 

var count = 0;

while (cound < 3 ) {
	console.log(count); //0 1 2
    count++;
 }

 

 

3-3. do...while문

코드블록을 먼저 실행하고 조건식을 평가한다. 

따라서 코드블록은 무조건 한번 이상 실행된다.

let count= 4;
do { 
console.log(count); // 4
count++; 
console.log(count)l // 5
} while (count < 3);

 

 

3-4. break문

반복문, 스위치 문의 코드블록을 탈출 시에 사용한다

그 외의 문에서는 문법에러(SyntaxError)가 발생한다.

 

3-5.continue 문

반복문의 코드블록 실행을 현 지점에서 중단하고 반복문의 증감식으로 실행 흐름을 이동시킨다.

break문 처럼 코드블록을 탈출하지 않는다.

let string = "Hello World.";
let seartch = 'l';
let count = 0;

for(let i = 0; i < string.length; i++) {
  if(string[i] !== search) continue;
  
  count++;
}

console.log(count); //3
const regxp = new RegExp(search, 'g');
console.log(string.match(regexp).length); // 3
for(let i = 0; i < string.length; i++) {
  if(string[i] !== search) count++;
}
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.