label
문은 식별자가 붙은 문을 말하며 프로그램의 실행 순서를 제어하는 데 사용한다.기본 문법
label: '식별하고자 하는 특정 영역'
// foo라는 레이블 식별자가 붙은 레이블 문
foo: {
console.log(1);
break foo; // foo 레이블 블록문을 탈출한다.
console.log(2);
}
console.log('Done!')
break
문은 label 문, 반복문(for, for ~ in, for ~ of, while, do ~ while) 또는 switch 문의 코드 블럭을 탈출한다.기본 문법
1. break; 2. break '라벨 이름';
// 문자열에서 특정 문자의 인덱스(위치)를 검색하는 예제
let string = 'Hello World';
let search = 'l';
let index;
for (let i = 0; i < string.length; i++) {
if (string[i] === search) {
index = i;
break; // string[2]에서 이미 l을 찾았으므로 더이상 반복문을 진행할 필요가 없다.
}
}
console.log(index); // 2
중첩된 for 문의 내부 for 문에서 break 문을 실행하면 내부 for 문을 탈출하여 외부 for 문으로 진입한다. 이때 내부 for 문이 아닌 외부 for 문을 탈출하려면 레이블 문을 사용해야 한다.
아래 예제는 break
문이 있는 if문으로 부터 가장 가까운 for문인 for (let j = 2; j < arr[i]; j++) {}
을 탈출해서 for (let i = 0; i < arr.length; i++) {}
문을 다시 실행한다.
// arr = [1, 2, 4, 5, 10, 20]
function solution(arr) {
let result = [];
let prime = true;
for (let i = 0; i < arr.length; i++) {
for (let j = 2; j < arr[i]; j++) {
if (arr[i] % j === 0) {
prime = false;
// arr[i]가 10이고 j는 2부터 9까지 들어오게 되는데, j가 2일때 바로 if문의 조건을
// 만족하므로 prime을 false로 바꾸고 j 반복문을 탈출하여 i 반복문 부터 다시 실해하게 된다.
break;
}
}
if (prime) {
result.push(arr[i])
}
}
return result
}
중첩된 for문의 제일 바깥에 있는 for문도 탈출하고 싶다면 레이블 문을 사용한다. 레이블 문은 break
문 오른쪽에 레이블명을 작성하고, 한번에 빠져나오고자 하는 반복문의 앞에 레이블명:
의 형식으로 레이블을 붙여주면 레이블 명이 붙어있는 반복문 밖으로 한번에 빠져나온다.
그러나 레이블 문은 중첩된 for 문 외부로 탈출할 때는 유용하지만 그 밖의 경우에 레이블 문을 사용하게 되면 프로그램의 흐름이 복잡해져서 가독성이 떨어지고 오류를 발생시킬 가능성이 높아 사용을 권장하지 않는다.
// outer라는 식별자가 붙은 레이블 for 문
outer: for (let i = 1; i < 3; i++) {
for (let j = 1; j < 3; j++) {
if (i + j === 3) {
break outer;
console.log(`inner [${i}, ${j}]`)
}
}
}
console.log('Done!') // Done!
break 문을 switch 문에서 사용할 경우 break 문에 레이블 식별자를 지정하지 않는다.
label 문, 반복문, switch 문의 코드 블럭 외에 break
문을 사용하면 SyntaxError
가 발생한다.
if (true) {
break; // SyntaxError: Illegal break statement
};
continue
문은 반복문의 코드 블럭 실행을 현 지점에서 중단하고 반복문의 증감식으로 실행 흐름을 이동시킨다.기본 문법
1. continue; 2. continue '라벨 이름';
// 문자열에서 특정 문자의 개수를 세는 예제
let string = 'Hello World';
let search = 'l';
let count = 0;
// 문자열은 유사 배열이므로 for 문으로 순회할 수 있다.
for (let i = 0; i < string.length; i++) {
// l'이 아니면 현 지점에서 실행을 중단하고 반복문의 증감식으로 이동한다.
if (string[i] !== search) {
continue;
} else {
count++; // continue 문이 실행되면 이 문은 실행되지 않는다.
}
}
console.log(count); // 3