프로그래밍 언어/JavaScript + TypeScript

[You Don't Know JS] 1. 타입(Type)

2021. 6. 21. 18:30
목차
  1. 1. 자바스크립트의 내장 타입
  2. 2. 값은 타입을 가진다.
  3. 3. 정리
본문은 JavaScript 언어에 대한 이해를 높이기 위해 "You Don't Know JS(카일 심슨 저)"를 읽고 공부한 내용을 정리한 글입니다. 공부가 목적이기 때문에 필요에 따라 생략이나 수정, 추가된 부분이 있을 수 있습니다.

 

1. 자바스크립트의 내장 타입

7가지 내장 타입

자바스크립에는 다음 7가지 내장 타입이 있으며, object를 제외한 나머지 6가지 타입을 원시 타입(Primitives)라고 한다.

  • null
  • undefined
  • boolean
  • number
  • string
  • object
  • symbol (ES6부터 추가)

 

typeof를 이용한 타입 확인

값 타입은 typeof 연산자를 이용해 알 수 있는데, undefined, boolean, number, string, object, symbol의 6가지 타입은 자신의 명칭과 동일한 문자열을 반환하지만, null은 'object'를 반환한다. 

typeof undefined === "undefined" // trie
typeof true === "boolean" // true
typeof 42 === "number" // true
typeof "42" === "string" // true
typeof { a: 1 } === "object" // true
typeof Symbol() === "symbol" // true

typeof null === "object" // true

따라서 타입으로 null 값을 정확히 확인하기 위해선 아래와 같이 작성해야 한다.

const a = null;
(!a && typeof a === "object") // true

또한, typeof는 다음과 같은 결과를 반환한다.

typeof function a(){ /*...*/ } === "function" // true
typeof [1, 2, 3] === "object" // true

위 결과를 보면 function이 최상위 레벨의 내장 타입처럼 보이지만, 실제로는 object의 하위타입이며 보다 정확히 말하자면 함수는 호출 가능한 객체(Callable Object)다. 마찬가지로 배열도 object의 하위타입이다.

 

2. 값은 타입을 가진다.

값은 타입이 있지만, 변수엔 따로 타입이 없다. 또한, 변수는 언제라도, 어떤 형태의 값이라도 가질 수 있다. 왜냐하면 자바스크립트는 타입 강제(Type Enforcement)를 하지 않기 때문이다.

 

값이 없는 vs 선언되지 않은

'undefined'(값이 없는)와 'undeclared'(선언되지 않은)은 자바스크립트에서 완전히 다른 개념이다. 

  • undefined: 접근 가능한 스코프 내에서 변수가 선언되었으나 현재 아무런 값도 할당되지 않은 상태
  • undeclared: 접근 가능한 스코프 내에서 변수 자체가 선언조차 되지 않은 상태

여기서 파생되는 몇가지 문제가 있다.

 

모호한 에러 메시지

const a
a // undefined
b // ReferencError: b is not defined

b라는 변수는 분명 선언되지 않은 상태이지만, "b is not defined"라는 에러메시지가 출력된다. 따라서 자바스크립트 내에서 "b is undefined"와 "b is not defined"는 다르다는 것을 주의해야 한다.

 

typeof 연산

const a
typeof a // "undefined"
typeof b // "undefined"

typeof 연산의 결과로 값이 없는 변수와 선언되지 않은 변수 모두 undefined를 반환한다.

 

3. 정리

  • 자바스크립트엔 7가지 내장 타입(null, undefined, boolean, number, string, object, symbol)이 존재하며, typeof 연산자로 타입을 확인할 수 있다.
  • 변수는 타입이 없지만 값은 타입이 있고, 타입은 값의 내제된 특성을 정의한다.
  • 자바스크립트 내에서 'undefined'와 'undeclared'는 엄연히 다른 개념이다.

 

 

저작자표시 비영리 (새창열림)

'프로그래밍 언어 > JavaScript + TypeScript' 카테고리의 다른 글

[스크랩] JavaScript(ES6), TypeScript, Node.js 개발자를 위한 무료 e북 4가지  (0) 2021.06.22
[You Don't Know JS] 2. 값(Value)  (0) 2021.06.22
[JavaScript] 함수 선언문 vs 함수 표현식  (0) 2021.03.23
[JavaScript] 펼침 연산자: spread operator  (0) 2021.02.17
[JavaScript] 변수 선언: const, let, var 차이  (2) 2021.02.14
  1. 1. 자바스크립트의 내장 타입
  2. 2. 값은 타입을 가진다.
  3. 3. 정리
'프로그래밍 언어/JavaScript + TypeScript' 카테고리의 다른 글
  • [스크랩] JavaScript(ES6), TypeScript, Node.js 개발자를 위한 무료 e북 4가지
  • [You Don't Know JS] 2. 값(Value)
  • [JavaScript] 함수 선언문 vs 함수 표현식
  • [JavaScript] 펼침 연산자: spread operator
코택
코택
코택
TaxFree
코택
전체
오늘
어제
  • 분류 전체보기 (369)
    • Spring (29)
      • Spring (18)
      • 스프링 핵심 원리 - 고급편 (11)
    • Spring Batch (4)
    • JPA (4)
    • CS (89)
      • 자료구조 (2)
      • 네트워크 (5)
      • 운영체제 (1)
      • 데이터베이스 (4)
      • SQL (7)
      • 알고리즘 이론 (4)
      • 알고리즘 문제 풀이 (66)
    • 웹 (28)
      • React.js (4)
      • Next.js (1)
      • Node.js (14)
      • FastAPI (4)
      • Django (5)
    • 프로그래밍 언어 (45)
      • Python (5)
      • Java + Kotlin (29)
      • JavaScript + TypeScript (11)
    • 테스트코드 (26)
      • ATDD, 클린 코드 with Spring (4)
      • 이규원의 현실 세상의 TDD: 안정감을 주는 코드.. (20)
    • 인프라 (6)
      • AWS (2)
      • Kubernetes (4)
    • 트러블슈팅 (25)
    • 책 (89)
      • Effective Java (54)
      • Effective Kotlin (14)
      • 도메인 주도 개발 시작하기: DDD 핵심 개념 정.. (11)
      • 웹 프로그래머를 위한 데이터베이스를 지탱하는 기술 (6)
      • 도메인 주도 설계 첫걸음 (4)
    • Git (10)
    • 회고 (5)
    • etc (8)

블로그 메뉴

  • 홈
  • 방명록
  • 관리
  • GitHub
  • LinkedIn

공지사항

  • 스킨 관련

인기 글

태그

  • BOJ
  • mysql
  • 브루트포스
  • 그래프
  • fastapi
  • dp
  • atdd
  • 장고
  • Shortest Path
  • Git
  • 백준
  • 깊이 우선 탐색
  • http
  • 파이썬
  • 그래프 탐색

최근 댓글

최근 글

hELLO · Designed By 정상우.
코택
[You Don't Know JS] 1. 타입(Type)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.