티스토리 뷰

Javascript - 타입과 값

유인동 강사님 깃헙 참고

https://github.com/Functional-JavaScript/functional.es

7가지 내장 타입으로 바라보기

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

  • null
  • undefined
  • boolean
  • number
  • string
  • object
  • symbol

위 타입은 다시 크게 두 가지로 나눌 수 있습니다. 객체(object)와 객체가 아닌 것입니다. 위 7가지 타입에서 객체를 제외한 모든 값은 원시 값이며, 원시 값의 경우 인자로 전달하거나 할당할 때 항상 값 복사가 이루어지고, 객체의 경우는 항상 레퍼런스 사본을 만듭니다.

const log = console.log;

var a = 10;
function f1(a2) {
  a2 = 5;
  log(a2); // 5
  log(a); // 10
}
f1(a);

const obj = { value: 10 };
function f2(obj2) {
  obj2.value = 5;
  log(obj2); // { value: 5 }
  log(obj); // { value: 5 }
  log(obj == obj2); // true
}
f2(obj);

원시타입과 객체의 전달/할당이 위와 같이 이루어지는 것을 잘 인지하고 다루는 것이 중요합니다. 이는 자바스크립트로 함수형 프로그래밍을 할 때 중요하며, 특히 불변성을 다루는 기초가 됩니다.

자바스크립트에서의 객체

자바스크립트에서의 Array, Map, WeakMap, Set, WeakSet, Promise 등은 모두 object의 하위 타입입니다.

log(typeof {}); // "object"
log(typeof []); // "object"
log(typeof new Map); // "object"
log(typeof new Set); // "object"
log(typeof new Promise(a => a)); // "object"

JSON 데이터 타입

JSON 데이터 타입은 다음과 같습니다.

  • string
  • number
  • object
  • array
  • true, false, null

JSON은 경량의 DATA-교환 형식이면서, 현대 프로그래밍에서 가장 많이 사용되는 DATA-교환 언어입니다.

위 값에 해당하지 않는 모든 값은 JSON으로 직렬화가 불가능합니다. 예를 들면 undefined도 JSON으로 직렬화할 수 없습니다.

JSON.stringify(undefined);
// undefined <--- 이건 JSON String이 된 것이 아니라 함수가 실패해서 undefined가 리턴된 것입니다.

JSON.stringify({ a: undefined });
// "{}"

JSON.stringify([undefined]);
// [null]

Map이나 Set 역시 JSON으로 직렬화할 수 없습니다.

JSON.stringify(new Set([1,2,3]));
// {}
JSON.stringify(new Map([['a', 1]]));
// {}

이처럼 자바스크립트에서는 JSON으로 직렬화할 수 있는 값과 그렇지 않은 값으로, 다시 두 가지로 나누어 데이터를 바라볼 수 있습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함