자바스크립트는 원시 타입과 객체 타입으로 분류됩니다. 이 두 타입은 변수로 연결된 메모리 공간에 무엇이 저장되는지에 따라 구분됩니다.
원시 타입 : 값
객체 타입 : 참조 값(힙의 메모리 주소)
자바스크립트에서는 int, float 없이 하나의 숫자 타입 Number를 가집니다.
숫자 타입 내에서 정수, 실수, 음수 뿐만 아니라 2진수, 8진수, 16진수(따옴표 없이)도 다룰 수 있습니다. 그 외에도 키워드로 다루는 특별한 숫자 타입도 있습니다.
Infinity : 양의 무한대
-Infinity : 음의 무한대
NaN : Not a number, 대소문자 주의
숫자 타입은 배정밀도 64비트 부동소수점 형식을 따릅니다. 그래서 다음과 같은 문제가 발생하기도 합니다.
십진수 소수를 이진수로 변환하는 과정에서 근삿값을 저장하다 보니 오차가 발생한 것입니다. 소수를 다룰 때는 toFixed(depth)
을 이용하면 정확한 소수 값을 얻을 수 있습니다.
" ", ' ', ``로 문자열 리터럴을 나타낼 수 있습니다.
작은 따옴표가 가장 일반적인 표기법입니다. 백 틱은 ES6에서 추가되었습니다.
논리적 참, 거짓을 나타내는 true와 false로 구성됩니다.
var
키워드로 변수를 선언하면 할당과 상관없이 우선 undefined로 초기화 됩니다. 이 타입은 자바스크립트 엔진이 해당 변수가 초기화 되었는지 확인하기 위해 사용하는 타입이기 때문에 변수를 빈 값으로 두고 싶은 개발자는 다음으로 다룰 null을 사용하면 됩니다.
null은 값이 없다는 것을 명시(의도적 부재)하기 위해 사용되며 다음과 같이 활용할 수 있습니다.
let value=null
과 같이 변수를 초기화하는 경우
값을 더 이상 참조하지 않는 경우 : null이 된 변수는 더 이상 참조하지 않게 되며 참조하지 않는 모든 변수는 가비지 컬렉션의 대상이 됨
함수가 유효한 값을 반환할 수 없는 경우
💡 변수 참조를 끝낸 뒤 null을 할당하면 가비지 컬렉션에 의해 메모리 해제가 해제된다.
다른 값과 중복되지 않는 유일한 값으로 주로 객체의 프로퍼티 키를 만들기 위해 사용합니다.
객체는 프로퍼티와 메서드로 구성된 변경 가능한 값입니다.
일반적인 객체, 배열, 함수를 포괄하는 개념입니다.
객체처럼 프로퍼티를 추가할 수 있습니다. 다만 length는 array 내부에서 관리되기 때문에 숫자 타입이 아닌 key로 value를 추가할 경우 그 길이가 반영되지 않습니다.
데이터 타입을 문자열로 반환합니다.
slice 해서 입맛에 맞게 사용하면 됩니다.
객체의 상속관계를 확인할 수 있습니다.
배열이 아닌 타입을 걸러낼 수 있습니다.
유사 배열 객체는 length 데이터 프로퍼티를 갖는 객체로 문자열, arguments, HTMLCollection, NodeList 등이 속합니다.
벨로그의 버튼 목록을 콘솔창에 출력해 보았습니다. 배열과 같이 출력되어 보이지만 맨 아래 줄 [[Prototype]]을 보면 'NodeList'라고 쓰여있습니다.
이처럼 배열이 아님에도 배열 행세를 하는 아이들을 유사 배열 객체라고 합니다.
쉽게, length 데이터 프로퍼티를 가지면 유사 배열 객체라고 생각하면 됩니다.
undefined가 보이시나요? 객체는 유사 배열 객체가 아닙니다(유사 배열 객체<객체). 이름에 속지 마세요.
당연히 객체에 length 프로퍼티를 집어 넣는다고 유사 배열 객체가 되지는 않습니다.
💡 배열(이터러블) < 유사 배열 객체(이터러블) < 객체
모던 자바스크립트 Deep Dive
자바스크립트 소수점 계산 오류
poiemaweb 5.13 Type Checking
JavaScript-15유사배열 객체(Array-like Objects)
Symbol 항상 쓸잆없어서 이해없이 대충 넘어갔었는데 잘 이해하고 가요