1-1 내장 타입

Nomade_Simia·2021년 11월 6일
0

📌오늘은 내장 타입을 알아보자!


자바스크립트에는 다음 7가지 내장 타입이 있다.

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

📎 object를 제외한 이들을 '원시 타입'이라 한다.

값의 타입은 typeof 연산자로 알 수 있다.

💡 typeof연산자의 반환 값은 string이다.


💻 code

typeof undefined === "undefined" // true
typeof true === "boolean" // true
typeof 42 === "number" // true
typeof "42" === "string" // true
typeof {life : 42} === "object" // true
typeof Symbol() === "symbol" // true
typeof null === "object" // true

위 코드를 보면 목록의 7가지 내장 타입의 typeof 반환값을 알 수 있다.

어라? 버그인가? 7번째 null의 반환값은 object이다.
"null"을 반환하면 좋겠지만 우리의 JS는 그렇지 않다!!!

그래서 타입으로 null값을 확인하려면 조건이 하나더 필요하다.


💻 code

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

💡 null은 'falsy'한 유일한 원시 값이지만, 타입은 'object'인 특별한 존재다.

typeof가 반환하는 문자열은 하나가 더 있다.


💻 code

typeof function a(){/* ... */} === "function"; //true

엥? 우리는 JS의 내장 타입에서 function을 보지 못했다. 이거도 버근가...?

typeof값을 보면 function이 마치 최상위 레벨의 내장 타입 처럼 보이지만 사실 object의 '하위 타입'이다.

💡 함수는 '호출 가능한 객체"

사실 함수는 객체라서 유용하다. 무엇보다 함수에 프로퍼티를 둘 수 있다.


💻 code

function a(b, c){
  /* ... */
} 

a.length // 2

함수에 선언된 인자 개수는 함수 객체의 length 프로퍼티로 알 수 있다.

함수 a는 인자 두 개(b, c)를 가지므로 "함수의 길이"는 2다.

그렇다면 배열은 어떨까? 독특한 타입일까?


💻 code

typeof [1,2,3] === "object" // true

그냥 객체다. 배열은 (키가 문자열인 객체와 반대로) 숫자 인덱스를 가지며, length 프로퍼티가 자동으로 관리되는 등의 추가 특성을 지닌 객체의 "하위 타입"이다.

🚪 마치며


오늘은 JS의 내장 타입에 대해 알아 보았다.
JS는 동적 언어로 타입을 거의 모든 자바스크립트 프로그램에서 강제 변환이 일어나므로 우리는 타입을 확실히 인지하고 사용하는 것이 중요하다.

따라서 우리는 이상하고 기막힌 오류를 예방하기 위해서 깊게 알 필요가 있다.

profile
코딩 잘하고 싶은 코딩몽키

0개의 댓글