타입 변환
- 타입 변환: 기존 원시 값을 사용해 다른 타입의 새로운 원시 값을 생성하는 것
- 원시 값은 변경 물가능한 값immutable value이므로 변경 불가능함
var x = 10;
var str = x + "";
- 위 코드 실행시 자바스크립트 엔진은
x + ''
표현식 평가를 위해 x 변수의 숫자 값을 바탕으로 새로운 문자열 값 '10'을 생성함. 이 값은 일회용이므로 이후 GC에 의해 메모리 해제됨
- 명시적 타입 변환(타입 캐스팅): 개발자의 의도적인 값의 타입 변환
- 암묵적 타입 변환(타입 강제 변환): 자바스크립트 엔진에 의한 값의 자동 타입 변환
- 명시적 타입 변환은 개발자의 의도가 명확하고, 암묵적 타입 변환은 가독성이 더 좋을 수 있음
- 코드 실행 결과를 예측하는 것이 중요
암묵적 타입 변환
- 암묵적 타입 변환 발생 시 자바스크립트 엔진은 원시 타입 중 하나로 타입을 자동 변환
- 종류
- 문자열 타입으로의 변환: + 연산자의 피연산자 중 문자열이 있을 경우. (ex:
1 + '2'
)
- 숫자 타입으로의 변환: 산술 연산자, 비교 연산자, + 단항 연산자(ex:
+'1'
)
- 산술 연산자에 의한 변환 시 빈 문자열, 빈 배열, null, false는 0 / true는 1 / 객체, 배열, undefined는 NaN으로 변환됨
- 불리언 타입으로의 변환: 제어문 or 삼항 조건 연산자의 조건식. 조건식 평가 결과 불리언 값이 아닐 경우 자바스크립트 엔진은 Truthy(참으로 평가되는 값)/Falsy(거짓으로 평가되는 값) 값으로 구분하여 암묵적 타입 변환 수행
- Falsy 값: false, undefined, null, 0, -0, NaN, 빈 문자열
명시적 타입 변환
- 방법: 1) 표준 빌트인 생성자 함수(String, Number, Boolean)을 new 연산자 없이 호출 2) 빌트인 메서드 3) 암묵적 타입 변환 이용
- 종류
- 문자열 타입으로의 변환: String 생성자 함수, Object.prototype.toString, 문자열 연결 연산자(+)
- 숫자 타입으로의 변환: Number 생성자 함수, parseInt&parseFloat(문자열만 가능), + 단항 산술 연산자, * 산술 연산자
- 불리언 타입으로의 변환: Boolean 생성자 함수, 부정 논리 연산자의 두 번 사용(!!)
단축 평가
- 단축 평가: 표현식을 평가하는 도중에 평가 결과가 확정된 경우 나머지 평가 과정을 생략하는 것. 반환 값은 확정된 평가 결과(피연산자) 값
- 단축 평가 규칙
논리합 연산자(` |
|
`) 단축 평가 표현식 |
평가 결과 |
`true |
|
anything` |
true |
`false |
|
anything` |
anything |
논리곱 연산자(&& ) 단축 평가 표현식 |
평가 결과 |
true && anything |
true |
false && anything |
anything |
- if문을 단축 평가로 대체할 수 있음
- 활용: 타입에러 방지
- 객체를 가리키기를 기대하는 변수가 null or undefined인지 확인 후 프로퍼티 참조
- 함수 매개변수에 기본값을 설정할 때
옵셔널 체이닝 연산자
- 옵셔널 체이닝 연산자(
?.
)는 좌항의 피연산자가 null or undefined인 경우 undefined를 반환, 그렇지 않으면 우항의 프로퍼티를 참조함(ES11에서 도입)
- 기존의 논리곱 연산자(
&&
)를 사용한 확인 방법을 대체 가능
- 기존 방법과의 차이: Falsy 값(false, undefined, null, 0, -0, NaN, '')이라도 null or undefined가 아니면 우항의 프로퍼티를 참조함
- 활용: 객체를 가리키기를 기대하는 변수가 null or undefined인지 확인 후 프로퍼티 참조
null 병합 연산자
- null 병합 연산자(
??
)는 좌항의 피연산자가 null or undefined인 경우 우항의 피연산자를, 그렇지 않으면 좌항의 피연산자를 반환함(ES11에서 도입)
- 기존의 논리합 연산자(
||
)를 사용한 확인 방법을 대체 가능
- 기존 방법과의 차이: Falsy 값(false, undefined, null, 0, -0, NaN, '')이라도 null or undefined가 아니면 우항의 프로퍼티를 참조함
- 활용: 함수 매개변수에 기본값을 설정할 때