https://developer.mozilla.org/en-US/docs/Glossary/Type_coercion
타입 변환이란 기존 원시 값을 사용해 다른 타입의 새로운 원시 값을 생성하는 것이다.
타입 변환에는 두 가지가 있다:
1) 명시적 타입 변환(explicit coercion) : 개발자가 의도적으로 값의 타입을 변환하는 것
2) 암묵적 타입 변환(implicit coercion): 자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환되는 것
var x = 10;
// 명시적 타입 변환
var str = x.toString();
console.log(typeof str, str); // string 10
// 암묵적 타입 변환
var str = x +"";
console.log(typeof str, str); // string 10
// 어느쪽이든 x 변수의 값이 변경된 것은 아니다. 새로운 원시값 str 을 생성하는 것 뿐.
console.log(type of x, x); // number 10
타입 캐스팅(type casting) 이라고도 한다.
명시적으로 타입 변환하는 방법: 빌트인 매서드 활용 + 암묵적 타입 변환 방법
문자열 타입으로 변환:
1) String(1) //'1'
2) (1).toString() //'1'
3) 1+'' // '1'
숫자 타입으로 변환
1) Number('1') // 1
2) ParseInt('1') or ParseFloat('1') // 1, 이경우는 문자열만 사용가능
3) +'1' // 1
+true // 1
4) '1' * 1 // 1
불리언 타입으로 변환
1) Boolean('x') // true
Boolean('') // false
2) !!'x' // true
!!'' // false
// 더 자세한 사항은 p.117 참조
타입 강제 변환(type coercion) 이라고도 한다.
암묵적으로 타입 변환하는 방법:
문자열 타입으로 변환: 하나의 피연산자라도 문자열인 두항 이상의 + 연산자
1+'2' // '12'
숫자 타입으로 변환: 모든 산술 연산자
1 - '1' // 0
1 * '1' // 1
1 / 'one' // NaN
불리안 타입으로 변환: Trusy 값은 true, Falsy 값은 false 로 반환.
if ( false ) console.log('1');
if ( !false ) console.log('2');
if ( '' ) console.log('3');
if ( !'' ) console.log('4');
if (0) console.log('5');
if (!0) console.log('6');
if (NaN) console.log('7');
if (!NaN) console.log('8');
if (undefined) console.log('9');
if (!undefined) console.log('10');
if (null) console.log('11');
if (!null) console.log('12');
// 2 4 6 8 10 12
'Cat' && 'Dog' // 'Dog'
'Cat' && 'false' // 'false'
'false' && 'Cat' // 'false'
'Cat' || 'Dog' // 'Cat'
'Cat' || 'false' // 'Cat'
'false' || 'Dog' // 'Dog'
좌항의 피연산자가 null/undefined 인 경우 undefined를 반환하고, 그렇지 않으면 우항의 프로퍼티 참조를 이어간다. 객체를 가리키기를 기대하는 변수가 null 또는 undefined 인지 확인하고 프로퍼티를 참조할 때 유용하다.
var elem = null;
var value = elem?.value;
console.log(value); // null
좌항의 피연산자가 null/undefined 인 경우 우항의 피연산자를 반환하고, 그렇지 않으면 좌항의 피연산자를 반환한다. 변수에 기본값을 설정할 때 유용하다.
var foo = null ?? 'default string';
console.log(foo); // "default string"