본 게시글에선 기본적인 연산자에 대한 설명은 생략하고 주의하거나 헷갈릴만한 것들에 대해서만 안내하고 있습니다.
break
문을 사용하지 않으면 이후 case문과 default문을 모두 실행하는 폴스루(fall through)가 나타나 의도대로 실행되지 않을 수 있다.
var changeName = function (month) {
var monthName;
switch (month) {
case 1: monthName = "January";
case 2: monthName = "February";
...
case 12: monthName = "December";
default: monthName = "Invalid month";
}
return monthName;
}
console.log(changeName(1)); // 'Invalid month'
var changeName = function (month) {
var monthName;
switch (month) {
case 1: monthName = "January";
break;
...
case 12: monthName = "December";
break;
default: monthName = "Invalid month";
}
return monthName;
}
console.log(changeName(1)); // 'January'
때론 해당 속성을 이용해서 작성하는 경우도 있습니다.
...
switch (month) {
case 1: case 3: case 5: ... case 12:
days = 31;
break;
...
}
만약 if ... else
문으로 해결할 수 있다면 switch
문을 사용하지 않는 것이 좋지만 가독성이 더 좋아질 경우 적절히 사용하는 편입니다.
코드 블록을 먼저 실행한 뒤 조건식을 평가합니다.
var count = 0;
do {
console.log(count);
count++;
} while (count < 0);
// 0
레이블 문(label statement: 식별자가 붙은 문), 반복문, switch 문의 코드 블록을 탈출합니다.
outer: for (var i = 0; i < 3; i++) {
for (var j = 0; j < 3; j++) {
if (i + j) break outer; // outer라는 식별자가 붙은 레이블 for 문을 탈출
console.log(`inner [${i}, ${j}]`);
}
}
하지만 레이블 문은 가독성이 나빠지고 오류를 발생시킬 가능성이 높아지기 때문에 일반적으로 권장하지 않습니다.
continue 문은 반복문의 코드 블록 실행을 현 시점에서 중단하고 반복문의 증감식으로 이동시킬 때 사용합니다. 아래 2개의 예시는 동일하게 동작합니다.
for (var i = 0; i < string.length; i++) {
if (string[i] !== search) continue; // continue 문 사용
count++;
...
}
for (var i = 0; i < string.length; i++) {
if (string[i] === search) {
count++;
...
}
}