오늘은 자바스크립트를 공부하면서 부족했던 부분들을 다시 공부해보려 합니다.
switch문
조건문이며, 다양한 경우 (case)에 대한 처리를 하기 위해 사용됩니다.
if-else문보다 가독성이 높고 보다 간결하게 코드 작성을 할 수 있습니다.
다음은 switch문의 기본구조입니다.
switch (변수) {
case 값1:
실행문1;
break;
case 값2:
실행문2;
break;
...
default:
실행문n;
}
switch 뒤 괄호 안에는 조건식이 들어가며 비교할 변수를 지정합니다.
case뒤에는 해당 값이 들어가고 조건식의 변수와 같으면 해당 case아래 실행문이 실행됩니다.
각 case문의 실행문이 끝나면 반드시 break문을 써야합니다. 만약 쓰지 않으면 무한에 빠지게 됩니다.
어떤 case도 해당하지 않는다면 default문이 실행됩니다.
break 문
반복문에서 사용되어 실행을 중단시키는 역할을 합니다.
for문에서 break를 사용하면 반복문을 즉시 종료합니다.
while문이나 do-while문에서는 다음 반복을 실행하지 않고 종료합니다.
switch문에서는 break를 만나면 switch문을 종료하고 다음 코드로 이동합니다.
{
for(let i=1; i<20; i++){
document.write(i);
if(i == 10){
break;
}
}
}
위의 예제에서는 10이 되는 시점에서 break문으로 중지가 되고 1부터 9까지의 수만 출력되지만,
{
for(let i=1; i<20; i++){
if(i == 10){
break;
}
document.write(i);
}
}
이 예제에서는 10일 때 break문을 만나지만 break문의 위치가 실행되는 코드 이후에 있기 때문에
현재 반복을 종료하는 것이 아니라, 다음 반복으로 넘어가게 됩니다.
그래서 이 예제의 결과는 1부터 19까지의 수가 나옵니다.
차이점
즉 둘의 차이점은 첫번째 코드는 조건문이 각각 독립적인 블록으로 분리되어 있으며,
break문이 반복문의 블록 내에 위치하고 있어 반복문의 실행을 중지시키게 됩니다.
두번째 코드는 반복문과 조건문이 하나의 블록으로 이루어져 있으며,
break문이 이후의 코드에 위치하고 있어 현재 실행되는 반복문의 실행을 중지하지 않고, 다음 반복으로 이동하게 됩니다.
continue문
반복문에서 현재 반복을 건너뛰고 다음 반복으로 이동할 때 사용합니다.
continue문을 만나면 현재 반복의 나머지 부분은 실행되지 않고, 다음 반복으로 이동하게 됩니다.
{
for(let i=1; i<20; i++){
if(i == 10){
continue;
}
document.write(i);
}
}
i가 10일 때 continue문이 실행되어 현재 반복의 나머지 부분인 document.write(i)가 실행되지 않고
다음 반복으로 이동하게 됩니다. 따라서 10을 제외한 1부터 19까지의 수가 출력됩니다.
{
for(let i=1; i<20; i++){
document.write(i);
if(i == 10){
continue;
}
}
}
이 예제에서는 i가 10일때 continue문이 실행되어 현재 반복의 나머지 부분이 실행되지 않고 다음 반복으로 이동합니다.
그러나 continue문의 위치가 나머지 부분 이후에 있기 때문에 1부터 20까지의 수가 모두 출력됩니다.
차이점
첫번째 코드에서는 i가 10일때 continue문이 실행되어 현재 반복의 나머지 부분 실행되지 않고
다음 반복으로 이동 되기 때문에 1부터 19까지의 수중에서 10만 출력되지 않습니다.
두번째 코드에서는 continue문이 document.write(i) 이전에 위치하고 있기 때문에
1부터 20까지의 수가 모두 출력 되고 i가 10일 때만 출력 결과에 차이가 있습니다.
비트 연산자
2진수로 나타낸 값들을 비트 단위로 조작하는 연산자 입니다.
연산 속도가 빠릅니다.
연산자 종류 | 설명 |
& | AND 연산자 : 두 비트가 모두 1인 경우 1을 반환하고, 그 외에는 0을 반환합니다. |
| | OR 연산. 두 비트 중 하나 이상이 1인 경우 1을 반환하고, 그 외에는 0을 반환합니다. |
^ | XOR 연산. 두 비트가 서로 다른 경우 1을 반환하고, 그 외에는 0을 반환합니다. |
~ | NOT 연산. 단항 연산자로, 비트를 반전시킵니다. 0은 1로, 1은 0으로 바뀝니다. |
<< |
왼쪽 시프트(shift) 연산. 이진수를 왼쪽으로 지정된 비트 수만큼 이동시킵니다. 오른쪽으로 이동 시 왼쪽 끝자리는 0이 됩니다. |
>> | 오른쪽 시프트(shift) 연산. 이진수를 오른쪽으로 지정된 비트 수만큼 이동시킵니다. 오른쪽으로 이동 시 왼쪽 끝자리는 0이 됩니다 |
{
let a = 9;
let b = 11;
let c =a^b; //비트연산자 10진수를 2진수로 바꾸고 계산
console.log(c) // 2
}
a와 b의 2진수 값은 1001과 1011이며 비트XOR 연산을 수행하면 0010이 됩니다.
1001
1011
0010 서로 다른 1만 1로 출력됨
0010은 10진수로 2와 같으므로 2가 출력됩니다.
{
let num1 =16, num2 = 80;
let result;
result = num1 < num2 ? num1 & num2 : num1 ^ num2; // 조건연산자
console.log(result) // 64
}
num이 num2보다 작으면 두 수의 비트 AND 연산을 수행한 결과를 result에 할당
그렇지 않으면 두 수의 비트 XOR 연산을 수행한 결과를 result에 할당
num1 과 num2 설정한 값이 조건에 참이 되므로 AND 연산이 된 결과가 result 에 할당이 됩니다.
16의 2진수는 10000
80의 2진수는 1010000
둘을 연결연산을 하면
1000000 (자리수 맞춤)
1010000
1000000
1000000은 10진수로 64와 같으므로 64가 출력됩니다.