개념 정리/모던 자바스크립트 딥다이브

모던 자바스크립트 : 타입변환과 단축평가

매진2 2023. 10. 18. 16:04
728x90

타입 변환에 대해서

1. 타입 변환이란?

  • 타입변환이랑 기존 원시값을 사용해 다른 타입의 새로운 원시 값 생성
  • 명시적 타입 변환, 암묵적 타입 변환 모두 기존 원시값을 직접 변경하는 건 아님
  • 코드를 예측하기 위해 타입변환이 어떻게 동작하는지 정확이 이해해야함
  • 타입변환 방법 : 생성자함수를 new 연산자 없이 호출, 빌트인 메서드 사용, 암묵적 타입변환 이용

**원시값은 변경 불가능한 값

 

2. 명시적 타입 변환 (타입 캐스팅)

  • 개발자가 의도적으로 값의 타입을 변환하는 경우

a. 문자열 타입으로 변환

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

b. 숫자 타입으로 변환

  • Number 생성자 함수를 new 연산자 없이 호출
  • parseInt, parseFloat함수 사용 (문자열->숫자)
  • + 단항 산술 연산자 이용
  • * 산술 연산자 이용

c. boolean 타입으로 변환

  • Boolean 생성자 함수를 new 연산자 없이 호출
  • ! 부정 논리 연산자를 두번 사용

 

3. 암묵적 타입 변환 (타입 강제 변환)

  • 개발자의 의도와 상관없이 표현식을 평가하는 도주엥 자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환되는 경우
  • 자바스크립트 엔진은 표현식을 에러 없이 평가하기 위해 피연산자의 값을 암묵적 타입 변환해 새로운 타입의 값을 만들어 단 한 번 사용하고 버림
  • 문자열, 숫자, boolean과 같은 원시 타입 중 하나로 자동 변환

a. 문자열 타입으로 변환

  • 자바스크립트 엔진은 문자열 연결 연산자 표현식을 평가하기 위해 문자열 연결 연산자의 피연산자 중에서 문자열 타입이 아닌 피연산자를 문자열 타입으로 암묵적 타입 변환
  • 예시 : 테플릿 리터럴의 표현식 삽입, 문자열 연결 연산자(문자열 값을 만드는 것)

b. 숫자 타입으로 변환

산술연산자(숫자 값 생성)

피연산자를 숫자 타입으로 변환할 수 없는 경우에는 산술 연산을 수행할 수 없어 표현식의 평가 결과는 NaN

비교연산자(boolean 값 생성)

피연산자의 크기를 비교하므로 모든 피연산자의 코드의 문색상 모두 숫자 타입이어야함

숫자 타입이 아니라면 숫자 타입으로 암묵적 타입 변환 시행

(112p 예시코드)

c. boolean 타입으로 변환

제어문(if문, for문), 삼항조건연산자의 조건식의 평가 결과를 boolean 타입으로 암묵적 타입 변환

자바스크립트 엔진은 불리언 타입이 아닌 값을 truthy값, falsy값으로 구분

  truthy falsy
예시 true, {}, [], 42, "0", "false"), new Date(), -42, 12n,
3.14, -3.14, Infinity, -Infinity
0, -0, 0n, "", null, undefined, undefined, document.all

 

4. 단축 평가

a. 논리 연산자를 사용한 단축 평가

  • 논리합(||), 논리곱(&&) 연산자 표현식은 언제나 2개의 피연산자 중 하나로 평가됨

단축 평가 

  • 표현식을 평가하는 도중 평가결과가 확정된 경우 나머지 평가 과정을 생략
  • 논리 연산의 결과를 결정하는 피연산자를 타입변환하지 않고 그대로 반환

  • 어떤 조건이 truthy 값일 때 무언가를 해야한다면 논리곱 연산자 표현식으로 if 문 대체 가능

  • 어떤 조건이 falsy 값일 때 무언가를 해야한다면 논리합 연산자 표현식으로 if 문 대체 가능

  • 객체를 가리키기를 기대하는 변수가 null 또는 undefined가 아닌지 확인하고 프로퍼티 참조할 때 타입 에러 방지

  • 함수를 호출 할 때 인수를 전달하지 않으면 매개벼수에는 undefined 할당 -> 함수 매개변수에 기본값 설정하면 에러 방지 가능

b. 옵셔널 체이닝 연산자

  • ES11 옵셔널 체이닝 연산자(?) : 좌항의 피연산자가 null, undefined인 경우 undefined 반환, 그렇지 않으면 우항의 프로퍼티 참조

c. null 병합 연산자

  • ES11 null 병합 연산자(??) : 좌항의 피연산자가 null, undefined인 경우 우항의 피연산자 반환, 그렇지 않으면 좌항의 피연산자 반환
  • 변수에 기본값 설정할 때 유용

 

 

 

모던 자바스크립트 딥다이브 책 내용을 정리한 것입니다!!!
728x90