자바스크립트에서의 타입 변환과 단축 평가
암묵적 타입 변환
개발자의 의도와 상관없이 코드의 문맥을 고려해서 자바스크립트 엔진에 의해 암묵적으로 타입이 변경된다.
문자열 타입으로 변환
1+'2' //'12'
피연산자가 하나라도 문자열
이 있다면 +
연산자는 문자열을 연결 연산자로 사용하게 된다. 그러므로 저 예제의 경우 문맥상 모두 문자열 타입으로 타입이 변환되어 ‘12’의 문자열 결과값을 나타낸다.
숫자 타입으로 변환
1-'2' //-1
1*'10' //10
1/'one' //NaN
산술 연산자의 피연산자는 모두 숫자
타입으로 변경된다. 만약 산술 연산을 진행할 수 없다면 NaN
이 된다.
+
단항 연산자는 피연산자가 숫자가 아니면 숫자로 암묵적으로 변환한다.
불리언 타입으로 변환
- false
- undefined
- null
- 0,-0
- NaN
위의 5가지를 제외한 나머지는 true
의 의미로 암묵적으로 변환된다.
명시적 타입 변환
개발자의 의도에 따라 명시적으로 타입을 변경한다.
문자열 타입으로 변환
- String 생성자 이용
- toString 메서드 사용
- 문자열 연결 연산자 사용
숫자 타입으로 변환
- Number 생성자 이용
- parseInt, parseFloat 사용
- +단항 산술 연산자 사용
- *산술 연산자 사용
불리언 타입으로 변환
- Boolean 생성자 이용
- !! 사용
옵셔널 체이닝 연산자
ES11에서 도입된 옵셔널 체이닝 연산자 ?.
은 좌항의 피연산자가 NULL 또는 undefined인 경우 undefined
를 반환하고 그렇지 않으면 우항의 프로퍼티 참조를 이어간다.
var elem = null;
var value = elem?.value;
console.log(value); // undefined
이는 객체를 가리키는 변수가 null 또는 undefined인지 확인하고 프로퍼티를 참조할 때 유용하다. 즉 단축평가에서 사용된 이 문장과 똑같다.
var elem = null;
var value = elem && elem.value;
console.log(value); // undefined
null 병합 연산자
ES11에서 도입된 null 병합 연산자 ??
는 좌항의 피연산자가 null 또는 undefined인 경우 우항의 피연산자를 반환하고, 그렇지 않으면 좌항의 피연산자를 반환한다. 변수에 기본값을 설정할 때 유용
var foo = null ? 'default string';
console.log(foo); // 'default string'