let mark = null ?? undefined ?? 5
console.log(mark) // 5
let or = null || undefined || '' || 0 || 5
console.log(or) // 5
?? 연산자는 null이나 undefined일 경우 false를 반환한다.
|| 연산자는 ''
나 NUmber(0)
일 경우에도 false를 반환한다는 것이다.
보통의 경우 if문을 활용하는 경우가 많지만 switch가 가독성과 효율측면에서 더 활용적일 때가 있다.
let num = 3
switch(num) {
case 1:
...
break;
case 2:
...
break;
case 3:
case 4:
case 5:
console.log(3, 4, 5) // 3, 4, 5
break;
default:
...
break;
}
switch 매개변수 num과 case의 조건을 비교하여 일치하는 경우에 그 case에 해당하는 코드를 실행한다. break를 입력하지 않을 경우에는 case와 switch문의 조건일치와 상관없이 그 다음 case들을 계속해서 실행한다.
지금 여기서는 num = 3이고 case의 3과 값이 일치하기 때문에 case 3부터 break가 있는 case 5까지 계속해서 코드를 실행한다. 이렇게 여러케이스에서 같거나 비슷한 코드를 실행할 필요가 있을 경우 switch문을 사용하면 훨씬 깨끗한 코드가 된다.
break: 반복문을 강제로 빠져나올 때 사용할 수 있다.
let sum = 0;
while (true) {
let value = +prompt("숫자를 입력하세요.", '');
if (!value) break; // (*)
sum += value;
continue: 본문에서 continue이후의 실행을 중단하고 다음차례의 반복을 실행한다.
for (let i = 0; i < 10; i++) {
// 조건이 참이라면 남아있는 본문은 실행되지 않습니다.
if (i % 2 == 0) continue;
alert(i); // 1, 3, 5, 7, 9가 차례대로 출력됨
}}
반복문 내에 반복문이 포함되어있을 경우 특정 반복문에 대해 break 또는 continue를 실행할 수 있는데 이때 등장하는 개념이 label이다.
임의의 숫자 n에서 소수만을 출력하기 위한 반복문
let n = 10;
outer: for (let i = 2; i <= n; i++) {
for (let j = 2; j < i; j++) {
if (i % j === 0) continue outer;
}
console.log(i); // 2, 3, 5, 7
}
여기에서 outer가 label이다.
본문의 i/ j의 나머지가 0이 될 경우 가장 외부의 반복문을 넘기고 다음 반복을 진행한다. 그러므로 콘솔이 찍히지 않는다.