22.11.14 월요일 74p~83p
07장 연산자
- 산술연산자 : 이항 산술 연산자
산술 연산이 불가능한 경우, NaN을 반환한다.
숫자 타입이 아닌 피연산자에 + 단항 연산자를 사용하면 피연산자를 숫자 타입으로 변환하여 반환한다.
let x = '1';
console.log(+x); // 1
- 산술연산자 : 문자열 산술 연산자
연산자는 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작한다.
true : 1, false : 0, null : 0 으로 타입 변환된다.
1 + true; // 2
1 + false // 1
1 + null // 1
이를 암묵적 타입 변환 또는 강제 타입 변환이라고 한다.
- 비교 연산자 : 동등/일치 비교 연산자
NaN === NaN; // false
NaN은 자신과 일치하지 않는 유일한 값이다. 따라서 숫자가 NaN인지 조사하려면 빌트인 함수 Number.isNaN을 사용한다.
숫자 0도 주의하자. 자바스크립트에는 양의 0과 음의 0이 있는데 이들을 비교하면 true를 반환한다.
0 === -0 // true
0 == -0 // true
Object.is 메서드는 예측 가능한 정확한 비교 결과를 반환한다.
Object.is(-0, +0); // false
Object.is(NaN, NaN) // true
22.11.15 화요일 84p~92p
07장 연산자
- 논리 연산자
논리합 또는 논리곱 연산자 표현식의 평가 결과는 불리언 값이 아닐 수도 있다. 논리합 또는 논리곱 연산자 표현식은 언제나 2개의 피연산자 중 어느 한쪽으로 평가된다.
// 단축 평가
'Cat' && 'Dog'; // 'Dog'
- 지수 연산자
음수를 거듭제곱의 밑으로 사용하려면 괄호로 묶어야 한다.
(-5) ** 2;
22.11.16 수요일 93p~107p
08장 제어문
- 조건문
경우의 수가 세 가지일때 삼항연산자를 사용하려면 아래와 같이 하면된다.
let kind = num? (num > 0 ? "양수" : "음수") : '영';
- 반복문
for 문의 변수 선언문, 조건식, 증감식에 어떤 식도 선언하지 않으면 무한루프가 된다.
do … while 문은 코드 블록을 먼저 실행하고 조건식을 평가한다. 따라서 코드 블록은 무조건 한 번 이상 실행된다.
let count = 0;
do{
console.log(count); // 0 1 2
count++;
} while(count < 3);
- break 문
break문은 코드 블록을 탈출한다. 좀 더 정확히 표현하자면 코드 블록을 탈출하는 것이 아니라 레이블 문, 반복문 또는 switch 문의 코드 블록을 탈출한다.
레이블 문,반복문, switch 문의 코드 블록 외에 break 문을 사용하면 SyntaxError가 발생한다.
레이블 문이란 식별자가 붙은 문을 말한다. 레이블 문은 프로그램의 실행 순서를 제어하는 데 사용한다. 사실 switch 문의 case 문과 default 문도 레이블 문이다. 레이블 문을 탈출하려면 break 문에 레이블 식별자를 지정한다.
foo: {
console.log(1);
break foo; // foo 레이블 블록문 탈출
console.log(2);
}
console.log('Done');
// 1
// Done
중첩된 for 문의 내부 for 문에서 break 문을 실행하면 내부 for문을 탈출하여 외부 for문으로 진입한다.
이때, 내부 for문이 아닌 외부 for문을 탈출하려면 레이블 문을 사용한다.
outer: for(let i=0;i<3;i++){
for(let j=0;j<3;j++){
if(i+j===3) break outer;
}
}
레이블 문은 중첩된 for문 외부로 탈출할 때 유용하지만 그 밖의 경우에는 일반적으로 권장하지 않는다. 레이블 문을 사용하면 프로그램의 흐름이 복잡해져서 가독성이 나빠지고 오류를 발생시킬 가능성이 높아지기 때문이다.
- continue 문
continue 문은 반복문의 코드 블록 실행을 현 시점에서 중단하고 반복문의 증감식으로 실행 흐름을 이동시킨다. break 문처럼 반복문을 탈출하지는 않는다.
'CS > 모던 자바스크립트 Deep Dive' 카테고리의 다른 글
11장 원시값과 객체의 비교 / 12장 함수 (0) | 2023.04.05 |
---|---|
9장 타입 변환과 단축평가 / 10장 객체 리터럴 / 11장 원시값과 객체 비교 (0) | 2023.04.05 |
4장 변수 / 5장 표현식과 문 / 6장 데이터 타입 (0) | 2023.04.05 |
1장 프로그래밍 / 03장 자바스크립트 개발 환경과 실행 방법 (0) | 2023.04.05 |
모던 자바스크립트 Deep Dive 독서 기록지 (0) | 2023.04.05 |