: 기존 원시 값을 사용해 다른 타입의 새로운 원시 값을 생성하는 것.
: 자바스크립트 엔진은 표현식을 평가할 떄 개발자의 의도와는 상관없이 코드의 문맥을 고려해 암묵적으로 데이터 타입을 강제 변환할 때가 있다.
0 + '' // 0
-0 + '' // 0
NaN + '' // NaN
Infinity + '' // Infinity
true + '' // true
false + '' // false
null + '' // null
undefined + '' // undefined
(Symbol()) + '' // TypeError
※ '', [ ], null, false는 0으로, true 1로 변환되며 존재하는 객체나 비지 않는 배열, undefined는 NaN을 반환한다.
: 개발자의 의도에 따라 명시적으로 타입을 변경하는 방법
문자열 타입으로 변환
// 1.
String(1);
String(NaN);
String(Infinity)
String(true)
String(false)
// 2.
(1).toString();
(NaN).toString();
(Infinity).toString();
(true).toString();
(false).toString();
// 3.
1 + '';
NaN + '';
Infinity + '';
true + '';
false + '';
숫자 타입으로 변환
// 1.
Number('0');
Number('10.53');
// 2.
parseInt('0');
parseFloat('10.53');
// 3.
+true;
+false;
// 4.
'0' * 1;
'-1' * 1;
불리언 타입으로 변환
// 1.
Boolean('x');
Boolean('false');
Boolean([]);
// 2.
!!'x';
!!'false';
!!null;
'Cat' && 'Dog' // 'Dog'
'Cat' || 'Dog' // 'Cat'
false && anything // false
※ 단축 평가 : 논리 연산의 결과를 결정하는 피연산자를 타입 변환하지 않고 반환하는 것으로 평가 도중에 평가 결과가 확정된 경우 나머지 평가 과정을 생략하는 것.
응용
var done = true;
var message = '';
message = done && '완료';
/* =======================* */
var done = false;
var message = '';
message = done || '미완료';
/* =======================* */
var done = true;
var message = '';
message = done ? '완료' : '미완료';
객체를 가리키기를 기대하는 변수가 null 또는 undfeined가 아닌지 확인하고 프로퍼티를 참조할 때
var element = null;
var value = element && element.value;
함수 매개변수에 기본값을 설정할 때
function getStringLength(str='') {
return str.length;
}
//ES6의 매개변수의 기본값 설정
var element = null;
var value = element?.value; // undefined
var foo = null ?? 'default string'; // 'default string'