타입 변환이란?
명시적 타입 변환(explicit coercion)
- 개발자가 의도적으로 값의 타입을 변환하는 것
- 타입 캐스팅(type casting)이라 한다.
var x = 10;
// 명시적 타입 변환
// 숫자를 문자열로 타입 캐스팅한다.
var str = x.toString();
console.log(typeof str, str); // string 10
// x 변수의 값이 변경된 것은 아니다.
console.log(typeof x, x): // number 10
암묵적 타입 변환(implicit coercion)
- 개발자의 의도와는 상관없이 표현식을 평가하는 도중에
자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환되기도 한다.
- 타입 강제 변환(type coercion)이라 한다.
var x = 10;
// 암묵적 타입 변환
// 문자열 연결 연산자는 숫자 타입 x의 값을 바탕으로 새로운 문자열을 생성한다.
var str = x + '';
console.log(typeof str, str); //string 10
// x 변수의 값이 변경된 것은 아니다.
console.log(typeof x, x) // number 10
명시적 타입 변환이나 암묵적 타입 변환이 기존 원시 값(위 예제의 경우 x 변수의 값)을 직접 변경하는 것은 아니다.
함수 매개변수에 기본값을 생성할 때
단축평가를 사용하기전
function getStringLength(str){
return str.length;
}
getStringLength();
// VM3018:3 Uncaught TypeError: Cannot read properties of undefined (reading 'length')
// at getStringLength (<anonymous>:3:16)
// at <anonymous>:1:1
- 함수를 호출할 때 인수를 전달하지 않으면 위에 코드 처럼 매개변수에는 undefined가 할당된다.
이 때 단축 평가를 사용해 매개변수의 기본값을 설정하면 undefined로 인해 발생할 수 있는 에러를 방지할 수 있다.
단축평가를 사용한 후
function getStringLength(str){
str = str || '';
return str.length;
}
//getStringLength(); // -> 0
//getStringLength('hi'); -> 2
-> 인수에 아무값을 넣지 않았지만 에러가 발생하지 않고 0이 출력됨
null 병합 연산자
ES11(ECMAScript2020)에서 도입된 null 병합(nullish coalescing) 연산자 ??는
좌항의 피연산자가 null 또는 undefined인 경우 우항희 피연산자를 반환하고,
그렇지 않으면 좌항의 피연산자를 반환한다.
null 병합 연산자 ??는 변수에 기본값을 설정할 때 유용하다.
// null 병합 연산자
// 좌항의 피연산자가 null 또는 undefined이면 우항의 피연산자를 반환
// 그렇지 않으면 좌항의 피연산자를 반환
var foo = null ?? 'default String';
console.log(foo) //'default string"
// Falsy 값인 0이나 ''도 기본값으로서 유효하다면 예기치 않은 동작이 발생할 수 있다.
var foo = '' || 'default string';
console.log(foo); // "default string"
// 좌항의 피연산자가 Falsy 값이라도 null
// 또는 undefined가 아니면 좌항의 피연산자를 반환한다.
var foo = '' ?? 'default string';
console.log(foo); // ''
댓글