: 의도적으로 값의 타입을 변환는 것
var x = 10;
var str = x.toString();
console.log(typeof str, str); // string 10
console.log(typeof x, x); // number 10
: 의도와 상관없이 표현식을 평가하는 도중 자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환
var x = 10;
var str = x + '';
console.log(typeof str, str); // string 10
console.log(typeof x, x); // number 10
의도와 상관없이 코드의 문맥을 고려해 암묵적으로 데이터 타입을 강제변환
// number 타입
0 + '' // "0"
-0 + '' // "0"
1 + '' // "1"
-1 + '' // "1"
NaN + '' // "NaN"
Infinity + '' // "Infinity"
-Infinity + '' // "Infinity"
// boolean 타입
true + '' // "true"
false + '' // "false"
// null 타입
null + '' // "null"
// undefined 타입
undefined + '' // "undefined"
// symbol 타입
(Symbol()) + '' // TypeError
// object 타입
({}) + '' // "[object Object]"
Math + '' // "[object Math]"
[] + '' // ""
[10, 20] + '' // "10, 20"
(function(){}) + '' // "function(){}"
Array + '' // "function Array(){[native code]}"
// 문자열 타입
+ '' // 0
+ '0' // 0
+ '1' // 1
+ 'string' // NaN
// boolean 타입
+ true // 1
+ false // 0
// null 타입
+ null // 0
// undefined 타입
+ undefined // NaN
// Symbol 타입
+ Symbol() // TypeError
// Object 타입
+ {} // NaN
+ [] // 0
+ [10, 20] // NaN
+ (function(){}) // NaN
false
, undefined
, null
, 0
, -0
, NaN
, ''(빈 문자열)
개발자의 의도에 따라 명시적으로 타입 변경
// 1. String 생성자 함수 사용
String(1); // "1"
String(NaN); // "NaN"
String(true); // "true"
// 2. toString 매서드 사용
(1).toString(); // "1"
(NaN).toString(); // "NaN"
(true).toString(); // "true"
// 3. 문자열 연결자 사용
1 + ''; // "1"
NaN + ''; // "NaN"
true + ''; // "true"
+
단항 산술 연산자 이용*
산순 연산자 이용// 1. Number 생성자 함수 사용
Number('1'); // 1
Number('10.53'); // 10.53
Number(true); // 1
// 2. parseInt, parseFloat 함수 사용
parseInt('0'); // 0
parseInt('-1'); // -1
parseFloat('10.53'); // 10.53
// 3. + 단항 산술 연산자 사용
+ '0'; // 0
+ '-1'; // -1
+ true; // 1
// 4. * 산술 연산자 사용
'0' * 1; // 0
'-1' * 1; // -1
true * 1; // 1
false * 1; // 0
!
부정 논리 연산자를 두 번 사용// 1. Boolean 생성자 함수 사용
Boolean('x'); // true
Boolean(''); // false
Boolean('false'); // true
Boolean(0); // false
Boolean(NaN); // false
Boolean(Infinity); // true
Boolean({}); // true
Boolean([]); // true
// 2. ! 부정 논리 연산자를 두 번 사용
!!'x'; // true
!!''; // false
!!'false'; // true
!!0; // false
!!NaN; // false
!!Infinity; // true
!!{}; // true
!![]; // true
true || anything // true
false || anything // anything
true && anything // anything
false && anything // false
'Cat' || 'Dog' // "Cat"
false || 'Dog' // "Dog"
'Cat' || false // "Cat"
'Cat' && 'Dog' // "Dog"
false && 'Dog' // false
'Cat' && false // false
?.
연산자
좌항이 null 또는 undefined인 경우, undefined 반환
그렇지 않으면 우항 반환
var elem = null;
var value = elem?.value;
console.log(value) // undefined
??
연산자
좌항이 null 또는 undefined인 경우, 우항 반환
그렇지 않으면 좌항 반한
var foo = null ?? 'default string';
console.log(foo) // default string