목표
- 9장의 내용을 최대한 이해하고 정리하기
var number = 10;
console.log(typeof number);
var str = number.toString();
console.log(typeof str);
// 결과
number
string
var number = 10;
console.log(typeof number);
var str = number + '';
console.log(typeof str);
// 결과
number
string
위의 두 종류의 타입 변환을 자세히 살펴보자.
var exp = 1 + "2";
console.log(typeof exp);
//결과
string
var exp = `1 + 1 = ${1 + 1}`
console.log(typeof exp);
//결과
string
console.log(1 - "1");
console.log(1 * "2");
console.log(1 * "one");
// 결과
0
2
NaN
var exp = '1' > 0;
console.log(exp);
// 결과
true
🤔 의문
- 자바스크립트 엔진은 숫자가 아닌 피연산자를 어떻게 암묵적으로 숫자 타입으로 변환시킬까?
단항 연산자(+)를 이용한다.
var str = "1";
console.log(typeof str);
console.log(typeof +str);
// 결과
string
number
예를 더 살펴보면 다음과 같다.
var zero = "0";
console.log(+zero);
var one = "one";
console.log(+one);
console.log(+true);
console.log(+false);
console.log(+null);
console.log(+undefined);
// 결과
0
NaN
1
0
0
NaN
var number = 1;
console.log(typeof number);
// 1. String 생성자 함수 사용
console.log(typeof String(number));
// 2. Object.prototype.toString 메서드를 이용
console.log(typeof number.toString());
// 결과
number
string
string
숫자 타입으로 변환하는 명시적 타입 변환은 다음과 같은 방법이 있다.
var str = "1";
console.log(typeof str);
// 1. String 생성자 함수 사용
console.log(typeof Number(str));
// 2. Object.prototype.toString 메서드를 이용
console.log(typeof parseInt(str));
// 결과
string
number
number
console.log("첫 번째 평가식" && "두 번째 평가식");
console.log("첫 번째 평가식" || "두 번째 평가식");
1. 객체를 담은 변수가 null 혹은 undefined 인지 확인하고 프로퍼티를 참조할 때
var obj = null;
var value = obj.value;
console.log(value);
// 결과
"Uncaught TypeError: Cannot read properties of null"
var obj = null;
var value = obj && obj.value;
console.log(value);
// 결과
null
2. 변수의 기본 값을 설정할 때
// url: www.velog.io/post&page=2
const page = parseInt(request.query.page) || 1;
console.log(page);
// 결과
2
// url: www.velog.io/post
const page = parseInt(request.query.page) || 1;
console.log(page);
// 결과
1
var obj = null;
var value = obj?.value;
console.log(value);
// 결과
undefined
var str = "";
var len1 = str && str.length;
console.log(`len1: ${len1}`);
var len2 = str?.length;
console.log(`len2: ${len2}`);
// 결과
"len1: "
// 결과
"len2: 0"
ES11(ECMAScript 2020)에서 도입된 null 병합 연산자 ??는 좌항의 피연산자가 null이나 undefined 이면 우항의 피연산자를 반환하고 아니면 좌항의 피연산자를 반환한다.
위에서 논리합(||)을 사용했던 페이지네이션 예시로 든 코드를 null 병합 연산자로 바꾸어 보면 다음과 같다.
// url: www.velog.io/post&page=2
const page = req.query.page ?? 2;
console.log(page);
// 결과
2
✏️ 참고
- 실제로 테스트 해보니 null 병합 연산자에서 피연산자에 parseInt를 붙이면 NaN을 반환하므로 주의해야 한다.
var str1 = "" || "default";
console.log(`str1: ${str1}`);
var str2 = "" ?? "default";
console.log(`str2: ${str2}`);
// 결과
"str1: default"
// 결과
"str2: "