JavaScript에는 7가지 내장 타입(null, undefined, boolean, number, string, object, symbol)
이 있으며, typeof 연산자
로 타입명을 알아낸다.
변수(Variables)
는 타입이 없지만 값(Values)
은 타입이 있고, 타입(Types)
은 값의 내재된 특성을 정의한다.
undefined
와 undeclared
가 대충 같다고 보는 경우가 많은데, JavaScript 엔진은 둘을 전혀 다르게 취급한다.
undefined
는 선언된 변수에 할당할 수 있는 값이지만, undeclared
는 변수 자체가 선언된 적이 없음을 나타낸다.
하지만 JavaScript는 이 두 용어를 대충 섞어버려, 에러 메세지뿐만 아니라 typeof 변환 값도 undefined
로 나타낸다.
그래도 typeof 안전 가드(Safety guard on typeof)
덕분에, 선언되지 않은 변수에 사용하면 유용하다.
Q1. JavaScript에서 7가지 내장 타입을 나열해보시오.
A1. null / undefined / boolean / number / string / object / symbol
Q2. JavaScript에서 ( a )는 선언된 변수에 할당할 수 있는 값이지만, ( b )는 변수 자체가 선언된 적이 없음을 나타낸다.
A2. (a) undefined (b) undeclared
배열 인덱스는 숫자인데,
배열 자체도 하나의 객체여서 키 / 프로퍼티 문자열을 추가할 수 있다.
하지만 배열 length가 증가하지는 않는다.
var a = [];
a["13"] = 42;
a.length; // 14
var a = [];
a["13"] = 42;
a.length; // 14
JavaScript 배열은 모든 타입의 값들을 숫자로 인덱싱한 집합이다.
문자열은 일종의 유사 배열
이지만, 나름 특성이 있기 때문에 배열로 다루고자 할 때에는 조심하는 것이 좋다.
JavaScript 숫자는 정수
와 부동 소수점 숫자
모두 포함된다.
원시 타입에는 몇몇 특수 값이 있다.
null 타입
은 null이란 값 하나뿐이고, 마찬가지로 undefined 타입도 값은 undefined 뿐이다.
undefined
는 할당된 값이 없다면 모든 변수 / 프로퍼티의 디폴트 값이다.
void 연산자
는 어떤 값이라도 undefined로 만들어 버린다.
숫자에는 NaN(유효하지 않은 숫자), +Infinity, -Infinity, -0 같은 특수 값이 있다.
단순 스칼라 원시 값(문자열, 숫자 등)은 값-복사에 의해, 합성 값(객체 등)은 레퍼런스-복사에 의해 값이 할당/전달된다.
자바스크립트에서의 레퍼런스는 다른 언어의 레퍼런스 / 포인터와는 전혀 다른 개념으로, 또 다른 변수 / 레퍼런스가 아닌 오직 자신의 값만을 가리킨다.