명시적 타입 변환
(explicit coercion) / 타입 캐스팅
(type casting): 개발자가 의도적으로 값의 타입을 변환하는 것
암묵적 타입 변환
(implicit coercion) / 타입 강제 변환
(type coercion): 개발자의 의도와는 상관없이 자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환 되는 것
명시적 타입 변환 / 암묵적 타입 변환
이 기존 원시 값을 직접 변경하지는 X -> 다른 타입의 새로운 원시 값을 생성하는 것암묵적 타입 변환
은 기존 변수 값을 재할당하여 변경하는 것 X -> 한번 사용하고 버림자바스크립트 엔진이 표현식을 평가할 때, 개발자의 의도와는 상관없이 코드의 문맥을 고려해 암묵적으로 데이터 타입을 강제 변환함
-> 문자열 , 숫자 , 불리언과 같은 원시 타입 중 하나로 타입을 자동 변환
1 + '2' // '12'
문자열 연결 연산자의 피연산자 중,
문자열 타입이 아닌 피연산자 -> 문자열 타입으로 암묵적 타입 변환
// 산술연산자
1 - '1 ' // 0
1 * '10' / 10
1 / 'one' // NaN
// 비교연산자
'1' > 0 // true
빈 문자열(''), 빈 배열([]), null, false => 0
true => 1
객체와 빈 배열이 아닌 배열, undefined => NaN
으로 변환됨
조건식의 평가 결과를 불리언 타입으로 암묵적 타입 변환
-> 자바스크립트 엔진은 불리언 타입이 아닌 값을 Truthy 값
(참으로 평가되는 값) / Falsy 값
(거짓으로 평가되는 값)으로 구분
Falsy 값 종류(7개):
false, undefined, null, 0, -0, NaN, ""(빈 문자열)
개발자의 의도에 따라 명시적으로 타입을 변경:
1. 표준 빌트인 생성자 함수(String, Number, Boolean)를 new 연산자 없이 호출
2. 빌트인 메서드를 사용
3. 암묵적 타입 변환을 이용
문자열 타입이 아닌 값을 문자열 타입으로 변환하는 방법 3가지
String(1); // "1"
String(true); // "true"
(1).toString(); // "1"
(true).toStringO; // "true"
1 + ''; // "1"
true + " ; // "true"
숫자 타입이 아닌 값을 숫자 타입으로 변환하는 방법 4가지
Number('-1'); // -1
Number(true); // 1
parseInt('-1'); // -1
+ '-1'; // -1
+ true; // 1
'1'* -1; // -1
true * 1; // 1
불리언 타입이 아닌 값을 불리언 타입으로 변환하는 방법 2가지
Boolean('x'); // true
Boolean(1); // true
Boolean(null); // false
Boolean({}); // true, 객체타입
!!'x'; // true
!!1; // true
!!null; // false
!![]; // true
단축평가
: 논리 연산의 결과를 결정하는 피연산자를 타입 변환하지
않고 그대로 반환
-> 표현식을 평가하는 도중에 평가 결과가 확정되면 나머지 평가 과정을 생략
'Cat' || 'Dog' // "Cat"
false || 'Dog' // "Dog"
'Cat' || false // "Cat"
'Cat' && 'Dog' // "Dog"
false && 'Dog' // false
'Cat' && false // false
var elem = null;
var value = elem && elem.value
function getStrLen(str) {
str = str || '';
return str.length;
}
옵셔널 체이닝 연산자
: ES11에서 도입됨, ?.
var elem = null;
var value = elem?.value;
console.log(value); // undefined
null 병합 연산자
: ES11에서 도입됨, ??
var foo = null ?? 'default';
console.log(foo); // 'default'