오늘 읽은 범위 : 9장 타입 변환과 단축 평가 (108p ~ 123p)
날짜 : 2023.11.7 ~ 11.8
목차
1. 타입 변환이란?
2. 암묵적 타입 변환
2. 명시적 타입 변환
2. 단축 평가
명시적 타입 변환
또는 타입 캐스팅
이라 한다.var x = 10;
// 명시적 타입 변환
// 숫자를 문자열로 타입 캐스팅한다.
var str = x.toString();
console.log(typeof str, str); // string 10
// x 변수의 값이 변경된 것은 아니다.
console.log(typeof x, x); // number 10
암묵적 타입 변환
또는 타임 강제 변환
이라 한다.var x = 10;
// 암묵적 타입 변환
// 문자열 연결 연산자는 숫자 타입 x의 값을 바탕으로 새로운 문자열을 생성한다.
var str = x + '';
console.log(typeof str, str); // string 10
// x 변수의 값이 변경된 것은 아니다.
console.log(typeof x, x); // number 10
// 피연산자가 모두 문자열 타입이어야 하는 문맥
'10' + 2 // -> '102'
// 피연산자가 모두 숫자 타입이어야 하는 문맥
5 * '10' // -> 50
// 피연산자 또는 표현식이 모두 불리언 타입이어야 하는 문맥
!0 // -> true
if (1) { }
// '+' 연산자는 피연산자 중 하나 이상이 문자열이므로,
// 문자열 연결 연산자로 동작한다.
1 + '2' // -> "12"
💡 ES6에서 도입된 템플릿 리터럴의 표현식 삽입은 표현식의 평가 결과를 문자열 타입으로 암묵적 타입 변환한다.
`1 + 1 = ${1 + 1}` // -> "1 + 1 = 2"
// 산술 연산자
1 - '1' // -> 0
1 * '10' // -> 10
1 / 'one' // -> NaN
// 숫자 타입으로 변환할 수 없는 경우 NaN이 된다.
// 비교 연산자의 역할은 불리언 값을 만드는 것이다.
'1' > 0 // -> true
📌 빈 문자열 (''), 빈 배열 ([]), null, false는 0으로, true는 1로 변환된다. 객체와 빈 배열이 아닌 배열, undefined는 변환되지 않아 NaN이 된다는 것에 주의하자.
if ('') console.log(x);
if('') console.log('1');
if(true) console.log('2');
if(0) console.log('3');
if('str') console.log('4');
if(null) console.log('5');
// 2 4
false로 평가 되는 Falsy 값
false
undefined
null
0. -0
NaN
'' (빈 문자열)
표준 빌트인 생성자 함수와 빌트인 메서드
표준 빌트인 생성자 함수와 표준 빌트인 메서드는 자바스크립트에서 기본 제공하는 함수다.
표준 빌트인 생성자 함수
는 객체를 생성하기 위한 함수이며 new 연산자와 함께 호출한다.
표준 빌트인 메서드
는 자바스크립트에서 기본 제공하는 빌트인 객체의 메서드다.
String(1); // -> "1"
String(true); // -> "true"
(1).toString(); // -> "1"
(true).toString(); // -> "true"
1 + ''; // -> "1"
true + ''; // -> "true"
<br>
Number('0'); // -> 0
Number(true); // -> 1
ParseInt('0'); // -> 0
parseFloat('0'); // -> 0
+'0'; // -> 0
+true; // -> 1
'0' * 1; // -> 0
true * 1; // -> 1
<br>
Boolean('x'); // -> true
Boolean(''); // -> false
Boolean(0); // -> false
Boolean(1); // -> true
!!'x'; // -> true
!!''; // -> false
!!0; // -> false
!!1; // -> true
<br>
'Cat' || 'Dog' // -> "Cat"
false || 'Dog' // -> "Dog"
'Cat' || false // -> "Cat"
'Cat' && 'Dog' // -> "Dog"
false && 'Dog' // -> false
'Cat' && false // -> false
단축 평가
라 한다.단축 평가를 사용하면 if 문을 대체할 수 있다.
var done = true;
var message = "";
주어진 조건이 true
일 때
// if 문
if (done) message = '완료';
// 단축 평가
massage = done && '완료';
주어진 조건이 false
일 때
// if 문
if (!done) message = '미완료';
// 단축 평가
massage = done || '미완료';
삼항 조건 연산자는 if ... else 문을 대체할 수 있다.
var done = true;
var message = "";
// if ... else 문
if (done) message = '완료';
else message = '미완료';
// 단축 평가
massage = done ? '완료' : '미완료';
<br>
?.
는 좌항의 피연산자가 null 또는 undefined인 경우 undefined를 반환하고, 그렇지 않으면 우항의 프로퍼티 참조를 이어간다.val elem = null;
var value = elem?.value;
console.log(value); // undefined
?.
는 객체를 가리키기를 기대하는 변수가 null 또는 undefined가 아닌지 확인하고 프로퍼티를 참조할 때 유용하다.?.
가 도입되기 이전에는 논리 연산자 &&
를 사용한 단축 평가를 통해 변수가 null 또는 undefined인지 확인했다.val elem = null;
var value = elem && elem.value;
console.log(value); // null
논리 연산자 &&
는 좌항 피연산자가 false로 평가되는 Falsy 값이면 좌항 피연산자를 그대로 반환한다.
좌항 피연산자가 Falsy 값인 0이나 ''인 경우도 마찬가지다.
하지만 옵셔널 체이닝 연산자 ?.
는 좌항 피연산자가 false로 평가되는 Falsy 값이라도 null 또는 undefined가 아니면 우항의 프로퍼티 참조를 이어간다.
var str = '';
var length = str && str.length;
console.log(length); // ''
//옵셔널 체이닝 연산자
var length = str?.length;
console.log(length); // 0
<br>
??
는 좌항의 피연산자가 null 또는 undefined인 경우 우항의 피연산자를 반환하고, 그렇지 않으면 좌항의 피연산자를 반환한다. var foo = null ?? 'default string';
console.log(foo); // "default string"
??
는 변수에 기본값을 설정할 때 유용하다.||
를 사용한 단축 평가를 통해 변수에 기본값을 설정했다.||
를 사용한 단축 평가의 경우 좌항의 피연산자가 false로 평가되는 Falsy 값이면 우항의 피연산자를 반환한다. var foo = '' || 'default string';
console.log(foo); // "default string"
// 좌항의 피연산자가 Falsy 값이라도 null 또는 undefined가 아니면 좌항의 피연산자를 반환한다.
var foo = '' ?? 'default string';
console.log(foo); // ""