티스토리 뷰
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으로 직렬화할 수 있는 값과 그렇지 않은 값으로, 다시 두 가지로 나누어 데이터를 바라볼 수 있습니다.
'Computer Engineering > Javascript' 카테고리의 다른 글
Javascript - 속깊은 자바스크립트[2. 자바스크립트의 스코프와 클로저 -스코프 ] (1) | 2018.04.23 |
---|---|
javascript- 속깊은 Javascript [1. 웹과 자바스크립트] (0) | 2018.04.21 |
Javascript - 전역객체와 this (0) | 2018.04.08 |
Javascript -클로저 (0) | 2018.03.18 |
Javascript -자바스크립트 기초 (수연산, 값으로서의 함수, 비동기 콜백과 ajax) (0) | 2018.03.18 |
댓글