[JavaScript] 모던 자바스크립트 Deep Dive 9장 - 타입변환과 단축 평가

2022. 7. 13. 19:03Web/JavaScript


9.1 타입변환이란?

개발자가 의도적으로 값의 타입을 변환하는것을 명시적 타입변환 또는 타입 캐스팅이라 한다.

var x = 10;

// 명시적 타입 변환
// 숫자를 문자열로 타입 캐스팅한다.

var str = x.toString();
console.log(typeof str, str); // string 10

// x 변수의 값이 변경되는 것은 아니다.
console.log(typeof x, x); // number 10

 

개발자의 의도와는 상관없이 표현식을 평가하는 도중에 자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환되는 것을 암묵적 타입 변환 또는 타입 강제 변환이라 한다.

var x = 10;

// 암묵적 타입변환
// 문자열 연결 연산자는 숫자 타입 x의 값을 바탕으로 새로운 문자열을 생성한다.
var str = x + '';
console.log(typeof str, str); // string 10

// x 변수의 값이 변경되는 것은 아니다.
console.log(typeof x, x); number 10

9.2 암묵적 타입 변환

// 문자열 타입으로 변환
// + 연산자는 피연산자 중 하나 이상이 문자열이므로 문자열 연결 연산자로 동작
1 + '2' // "12"
`1 + 1 = ${1 + 1}` // "1 + 1 = 2"

// 숫자 타입으로 변환
// 산술 연산자의 모든 피연산자는 코드 문맥상 모두 숫자 타입이어야 한다.
1 - '1' // 0
1 * '10' // 10
1 / 'one' // NaN

// 불리언 타입으로 변환
// 자바스크립트 엔진은 조건식의 평가 결과를 불리언 타입으로 암묵적 타입 변환한다.
if('') console.log('1');
if(true) console.log('2');
if(0) console.log('3');
if('str') console.log('4');
if(null) console.log('5');
// 2 4

 

false로 평가되는 Falsy 값

  • false
  • undefined
  • null
  • 0, -0
  • NaN
  • ' '(빈 문자열)

9.3 명시적 타입 변환

9.3.1 문자열 타입으로 변환

1. String 생성자 함수를 new 연산자 없이 호출
2. Object.prototype.toString 메서드를 사용
3. 문자열 연결 연산자를 이용

// 숫자 타입 => 문자열 타입
String(1); // "1"
(1).toString(); // "1"
1 + ''; // "1"

// 불리언 타입 => 문자열 타입
String(true); // "true"
(true).toString(); // "true"
true + ''; // "true"

9.3.2 문자열 타입으로 변환

1. Number 생성자 함수를 new 연산자 없이 호출
2. parseInt, parseFloat 함수를 사용(문자열만 숫자 타입으로 변환 가능)
3. + 단항 산술 연산자를 이용

4. * 산술 연산자를 이용

// 문자열 타입 => 숫자 타입
Number('0'); // 0
parseInt('0'); // 0
+'0'; // 0
'0' * 1; // 0

// 불리언 타입 => 숫자타입
Number(true); // 1
+'true'; // 1
true * 1; // 1

9.3.3 불리언 타입으로 변환

1. boolean 생성자 함수를 new 연산자 없이 호출

2. ! 부정 논리 연산자를 두 번 사용

// 문자열 타입 => 불리언 타입
Boolean('x'); // true
Boolean(''); // false
Boolean('false'); // true

!!'x'; // true
!!''; // false

// 숫자 => 불리언 타입
Boolean(0); // false
Boolean(1); // true
Boolean(NaN); // false

!!0; // false
!!NaN; // false

9.4 단축 평가

단축 평가 표현식 평가 결과
true || anything true
false || anything anything
true && anything anything
false && anything false

9.4.2 옵셔널 체이닝 연산자

ES11에서 도입된 옵셔널 체이팅 연산자 ?.는 좌항의 피연산자가 null 또는 undefined인 경우 undefined를 반환하고, 그렇지 않으면 우항의 프로퍼티 참조를 이어간다.

 

객체를 가리키는 변수가 null 또는 undefined가 아닌지 확인하고  프로퍼티를 참조할 때 유용하다.


9.4.3 null 병합 연산자

ES11에서 도입된 null 병합 연산자 ??는 좌항의 피연산자가 null 또는 undefined인 경우 우항의 피연산자를 반환하고, 그렇지 않으면 좌항의 피연산자를 반환한다. null 병합 연산자 ??는 변수에 기본값을 설정할 때 유용하다.