9.1 타입 변환이란?
개발자의 의도에 따라 타입을 변환가능하며, 명시적 타입 변환 or 타입 캐스팅이라합니다.
개발자의 의도와 상관없이 표현식을 평가하는 도중에 자바스크립트 엔진에 의해 암묵적으로 타입이 자동변환 되는 것을 암묵적 타입변환or 타입 강제 변환 이라고 합니다.
9.2 암묵적 타입 변환
9.2.1 문자열 타입으로 변환
문자열 타입이 아닌 값을 문자열과 암묵적 타입변환을 수행할 때 아래와 같이 변합니다.
// 숫자
0 + '' // "0"
-0 + '' // "0"
1 + '' // "1"
-1 + '' // "-1"
NaN + '' // "NaN"
Infinity + '' // "Infinity"
-Infinity + '' // "-Infinity"
// 불리언 타입
true + '' // "true"
false + '' // "false"
//null
null + '' // "null"
// undefined 타입
undefined + '' // "undefined"
// 심벌 타입
(Symbol()) + '' // TypeError: Cannot convert a Symbol vlue to a string
// 객체 타입
({}) + '' // "[Object Object]"
Math + '' // "[Object Math]"
[] + '' // ""
[10, 20] + '' // "10,20"
(function(){}) + '' // "function(){}"
Array + '' // "function Array() { [native code] }
JavaScript
복사
9.2.2 숫자 타입으로 변환
산술 연산자와 비교 연산자는 암묵적으로 타입 변환을 발생시킨다.
1 - '1' // 0
1 / 'one' // NaN
'1' > 0 // true
// 문자열
+'' // 0
+'1' // 1
+'string' // NaN
// 불리언
+true // 1
+false // 0
// null
+null // 0
// undefined
+undefined // NaN
// Symbol
+Symbol() / TypeError: Cannot convert a Symbol value to a number
// 객체
+{} // NaN
+[] // 0
+[10, 20] // NaN
+(function(){}) // NaN
JavaScript
복사
9.2.3 불리언 타입으로 변환
제어문이나 삼항연산자의 조건식은 암묵적으로 타입변환이 일어난다.
아래 값들은 false로 평가된다
•
false
•
undefined
•
null
•
0, -0
•
NaN
•
‘’ // 빈문자열이 아닌’0’은 true이다
명시적 타입 변환
생성자함수를 new 연산자 없이 호출하는 빌트인 매서드를 이용하는 방법이 있다.
9.3.1 문자열 타입으로 변환
1.
String 생성자 함수를 new 연산자 없이 호출 // String(1)
2.
Object.prototype.toString 메서드를 이용 // (1).toSTring();
3.
문자열 연결 연산자를 이용하는 방법 // 1 + ‘’ // “1”
9.3.2 숫자 타입으로 변환
1.
Number 생성자 함수를 new 연산자 없이 호출 // Number(’1’) // “1”
2.
parseInt, parseFloat 함수를 이용하는 방법(문자열만 변환 가능) // parseInt(’0’) // 0
3.
+ 단한 영상자를 사용 // +’0’ // 0
4.
* 산술 연산자를 이용 // ‘0’ * 1 // 0
9.3.3 불리언 타입으로 변환
1.
Boolean 생성자 함수를 new 연산자 없이 호출 // Boolean(’x’) // true
2.
!부정 논리 연산자를 두번 사용 // !!1 // true
9.4 단축 평가
9.4.1 논리 연산자를 사용한 단축 평가
&&연산과 ||연산은 연산의 결과를 결정하는 피연산자의 타입을 변환하지 않고, 평가하는 도중에 결과가 확정난 경우 나머지를 평가하는 과정을 그대로 반환하는데 이를 단축평가라 한다.
9.4.2 옵셔널 체이닝 연산자
옵셔널 체이닝 연산자( ?. )는 좌한의 피연산자가 null이나 undefined일 경우 undefined를 반환하고 아니면 우항의 프로퍼티 참조를 이어간다.
9.4.3 null 병합 연산자
null 병합 연산자 ( ?? )는 좌항의 피연산자가 null또는 undefined일 경우 우항의 피연산자를 반환하고, 아닐경우 좌항의 피피연산자를 반환한다.