이 영역을 누르면 첫 페이지로 이동
시간의화살 블로그의 첫 페이지로 이동

시간의화살

페이지 맨 위로 올라가기

시간의화살

행복하세요

[JavaScript] 타입 변환 / 단축 평가

  • 2022.03.08 13:54
  • Programming Language/JavaScript

 

 

 

타입 변환

 

 

Integer.parse() / x.toString() 처럼 개발자가 명시적으로 타입 변환을 선언하는 경우도 있지만, 개발자의 의도와는 상관없이 표현식을 평가하는 중 가급적 에러 발생을 피하기 위해 엔진이 암묵적으로 타입을 변환하는 경우도 있다.

 

암묵적 타입 변환이 발생 시 원시 타입 중 하나로 타입이 자동으로 변환된다. 그 예시를 알아보자.

 

1 + '2' // <12> 지난번에 언급했다. + 연산자는 피연산자가 문자열을 포함하면 concatenate를 수행한다.

`1 + 1 = ${1 + 1}` // 표현식의 평가 결과가 문자열 타입으로 변환된다.

1 - '1' // <0> + 외의 산술 연산자는 모두 숫자 타입으로 형변환을 진행한다.

'1' > 0 // <true> 비교 연산지는 bool값을 만든다. 피연산자를 숫자 타입으로 바꿔서 작동한다.

+'' // <0> + 단항 연산자는 숫자 타입으로 타입 변환을 수행한다. 이 때 0으로 변환되는 경우는 빈 문자열 / '0' / null / false / [] 등

// boolean 타입으로 형변환 시 false가 되는것들은 외워두자. false / undefined / null / 0 / NaN / ''

 

문자열 0 ('0')과 숫자 0 (0)을 헷갈리지 않도록 조심하자.

 

문자열 타입으로의 형변환은 다음과 같이 할 수 있다.

 

  • String()
  • ().toString()
  • true + ''

 

숫자 타입으로의 형변환은 다음과 같이 할 수 있다.

 

  • Number()
  • parseInt()
  • +
  • *

 

boolean 타입으로의 형변환은 다음과 같이 할 수 있다.

 

  • !
  • !!
  • Boolean()

 

 

단축 평가

 

 

 

논리 연산자는 단축 평가 규칙을 따른다. 

 

'Something' && 'Anything' // Something이 true이므로 Anything을 평가하는데, 이 때 Anything도 true이므로 'Anything'을 반환한다.

'Something' || 'Anything' // Something이 true이므로 다음 피연산자를 확인하지 않고 표현식을 평가할 수 있다. 'Something' 반환.

 

 

다른 프로그래밍 언어에서 볼 수 없는 성질이라서 생소하지만, 객체와 함수를 다룰 때 유용하게 사용된다.

 

단축 평가의 몇 가지 예시를 살펴보자.

 

let something = null;

let anything = something?.anything; 
// something이 null이나 undefined이면 undefined를 반환하고, 그렇지 않으면 우측의 property 참조를 진행한다.

let anything = null ?? 'asdf' 
// null병합 연산자 ??는 좌측의 피연산자가 null이나 undefined이면 우측의 피연산자를 반환하고, 그렇지 않으면 좌측의 피연산자를 반환한다.

 

 

null병합 연산자 ??는 논리합 연산자 ||를 보완하기 위해 등장했고, 옵셔널 체이닝 연산자 ?.는 논리곱 &&를 보완하기 위해 등장했다.

 

 

 

반응형

'Programming Language > JavaScript' 카테고리의 다른 글

[JavaScript] 스코프  (0) 2022.03.10
[JavaScript] 함수  (0) 2022.03.10
[JavaScript] 연산자 / 제어문  (0) 2022.03.08
[JavaScript] 리터럴 / 타입  (0) 2022.03.07
[JavaScript] 입문 / 변수  (0) 2022.03.07

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [JavaScript] 스코프

    [JavaScript] 스코프

    2022.03.10
  • [JavaScript] 함수

    [JavaScript] 함수

    2022.03.10
  • [JavaScript] 연산자 / 제어문

    [JavaScript] 연산자 / 제어문

    2022.03.08
  • [JavaScript] 리터럴 / 타입

    [JavaScript] 리터럴 / 타입

    2022.03.07
다른 글 더 둘러보기

정보

시간의화살 블로그의 첫 페이지로 이동

시간의화살

  • 시간의화살의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (606) N
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • Java (19)
      • JavaScript (15)
      • C (25)
      • C++ (12)
      • Python (1)
      • PHP (2)
    • Computer Science (69) N
      • Operating System (18)
      • Computer Network (17) N
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Github Actions (0)
      • Amazon Web Service (8)
    • Machine Learning (28)
      • AI Introduction (28)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • Solutions (13)
    • Life Logs (0)
    • 낙서장 (25)

최근 글

나의 외부 링크

메뉴

  • 홈

정보

13months의 시간의화살

시간의화살

13months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © 13months.

티스토리툴바