💥 자바스크립트의 모든 값에는 타입이 존재한다.
값들의 타입을 변환시키는 방법에는 두 가지가 있다.
명시적 타입변환과 암묵적 타입변환이다.
두 방법 모두 기존 원시 값을 직접 변경하는 것이 아닌, 기존 원시 값을 사용해 다른 타입의 새로운 원시값을 생성한다.
그리고 모두 문자열, 숫자, 불리언 타입으로의 변환이 있다.
먼저! 명시적 타입 변환부터 봐보자!
명시적 타입변환이란?
개발자가 의도적으로 값의 타입을 변환
하는 것이다.
개발자가 의도에 따라 명시적으로 타입을 변경하는 방법으로는 자바스크립트에서 기본 제공하는 생성자 함수(String, Number, Boolean)를 new 연산자 없이 호출하거나, 자바스크립트에서 기본 제공하는 빌트인 객체의 메서드를 사용, 암묵적 타입 변환 하는 방법이 있다.
문자열 타입이 아닌 값을 문자열 타입으로 변환한다
숫자 타입이 아닌 값을 숫자 타입으로 변환한다.
불리언 타입이 아닌 값을 불리언 타입으로 변환한다.
자바스크립트 엔진이 표현식을 평가하는 도중 에러를 발생시키지 않도록 하기 위해 암묵적으로 타입을 변환. 즉, 개발자의 의도와는 상관 없다.
숫자, 불리언, null, undefined, 심벌, 객체 타입도 변환 가능
ex)
({}) + '' // "[object Object]" ➡ 객체와 문자사이에 +산술 연산자가 오면, +는 산술 연산자가 아닌 문자 연결 연산자가 되어 객체를 문자열로 변환한다.
피연산자를 숫자 타입으로 변환할 수 없는 경우 평가 결과는 NaN이다.
ex)
1 - '1' // 0 ➡ -산술 연산자를 하기 위해 문자 1을 숫자 1로 변환하였다.
'1' > 0 // true ➡ 비교연산자(>)는 불리언 값을 만든다. 숫자 0과 비교하기 위해 문자타입 1을 숫자 1로 변환하여 값을 비교한다.
+'0' // 0 ➡ +단항 연산자 뒤에 숫자타입이 아닌 피연산자가 오면 암묵적으로 숫자타입으로 변환해주어 평가결과가 0이다.
if문, for문과 같은 제어문의 조건식 또는 삼항 조건 연산자의 조건식은 불리언 값으로 평가되어야한다. 이런 조건식을 평가할 때 암묵적으로 불리언 값으로 변환한다.
ex) if('') console.log('1'); // ➡ if문의 조건식은 빈 문자열로 false로 평가되어 아무것도 출력되지 않았다.
🛑 알아가기 🛑
1. 자바스크립트에서는 true는 1, false는 0으로 변환된다.
2. 빈 문자열, 빈 배열, null는 숫자 타입으로 0으로 변환되고 객체, 비어있지않은 배열, undefined는 숫자타입으로 변환되지 않아 평가결과가 NaN이 나온다.
3. 자바스크립트에서 불리언 타입이 아닌 값을 false로 구분하는 값들
타입을 변환하는 방법으로 명시적 타입 변환과 암묵적 타입 변환을 알아보았지만, 암묵적 타입변환은 최대한 사용하지 않는 것이 좋다.
why❓
암묵적 타입 변환이 되게 되면, 개발자가 의도한 것이 아닌 자바스크립트 엔진이 암묵적으로 타입을 변환시켜 예상치 못한 결과가 나올 수도 있다. 그렇게 되면 가독성이 좋지 않다. 가독성이 좋지 않은 코드는 좋은코드라고 할 수 없다.