암묵적 타입 변환은 기존 변수 값을 재할당하여 변경하는 것이 아니라 자바스크립트 엔진으로 인해 피연산자의 값을 암묵적 타입 변환해 새로운 타입의 값을 만들어 단 한 번 사용하고 버린다.
암묵적 타입 변환이 가독성에 더 좋을 때도 있다. 하지만 예측이 가능한 코드작성을 하는 것이 중요하고 다른 사람이 봤을때도 예측이 가능해야한다.
// 1. String 생성자 함수를 new연산자 없이 호출하는 방법
// 숫자 타입 => 문자열 타입
String(1); //→ "1"
String(NaN); //→ "NaN"
String(Infinity); //→ "Infinity"
// 불리언 타입 => 문자열 타입
String(true); //→"true"
String(false); //→"false"
// 2. Object.prototype.toString 메서드를 사용하는 방법
// 숫자 타입 => 문자열 타입
(1).toString(); //→"1"
(NaN).toString(); //→"NaN"
(Infinity).toString(); //→"Infinity"
//불리언 타입 => 문자열 타입
(true).toString(); //→ "true"
(false).toString(); //→ "false"
// 3. 문자열 연결 연산자를 이용하는 방법
// 숫자 타입 => 문자열 타입
1 + ''; //→ "1"
NaN + ''; //→ "NaN"
Infinity + ''; //→ "Infinity"
// 불리언 타입 => 문자열 타입
true + ''; //→ "true"
false + ''; //→ "false"
// 1. Number 생성자 함수를 new 연산자 없이 호출하는 방법
// 문자열 타입 => 숫자 타입
Number('0'); // → 0
Number('-1'); // → -1
Number('10.53'); // → 10.53
// 2. parseInt, parseFloat 함수를 사용하는 방법(문자열만 변환 가능)
parseInt('0'); // → 0
parseInt('-1'); // → -1
parseInt('10.53'); // → 10.53
// 3. + 단항 산술 연산자를 이용하는 방법
// 문자열 타입 => 숫자 타입
+'0'; // → 0
+'-1'; // → -1
+'10.53'; // → 10.53
// 불리언 타입 => 숫자 타입
+true; // → 1
+false; // → 0
// 4. * 산술 연산자를 이용하는 방법
// 문자열 타입 => 숫자 타입
'0' * 1; // → 0
'-1' * 1; // → -1
'10.53' * 1; // → 10.53
// 불리언 타입 => 숫자 타입
true * 1; // → 1
false * 1; // → 0
// 1. Boolean 생성자 함수를 new 연산자 없이 호출하는 방법
// 문자열 타입 => 불리언 타입
Boolean('x'); // → true
Boolean(''); // → false
Boolean('false'); // → true
// 숫자 타입 => 불리언 타입
Boolean(0); // → false
Boolean(1); // → true
Boolean(NaN); // → false
Boolean(Infinity); // → true
// null 타입 => 불리언 타입
Boolean(null); // → false
// undefined 타입 => 불리언 타입
Boolean(undefined); // → false
// 객체 타입 => 불리언 타입
Boolean({}); // → true
Boolean([]); // → true
// 2. ! 부정 논리 연산자를 두 번 사용하는 방법
// 문자열 타입 => 불리언 타입
!!'x'; // → true
!!''; // → false
!!'false'; // → true
// 숫자 타입 => 불리언 타입
!!0; // → false
!!1; // → true
!!NaN; // → false
!!Infinity; // → true
// null 타입 => 불리언 타입
!!null; // → false
// undefined 타입 => 불리언 타입
!!undefined; // → false
// 객체 타입 => 불리언 타입
!!{}; // → true
!![]; // → true