자바스크립트 객체는 크게 3가지로 분류 된다.
표준 빌트인 객체 : ECMAScript 사양에 정의된 객체를 의미, 애플리케이션 전역에 공통 기능을 제공, 전역 객체의 프로퍼티로 제공되므로 별도의 선언 없이 전역 변수처럼 언제나 참조가능
호스트 객체 : ECMAScript 사양에 정의되어 있지는 않지만, 브라우저 환경 or Node.js 환경에서 추가로 제공하는 객체를 의미
사용자 정의 객체 : 사용자가 직접 정의한 객체를 의미
인스턴스를 생성 할 수 있는 생성자 함수 객체이다.
자바스크립트 Object, String, Number, Boolean, Symbol, Array, Map/Set, Function 등 40여 개의 표준 빌트인 객체를 제공
프로토타입 메서드와 정적 메서드를 제공
이 중 Math, Reflect, JSON 는 정적 메서드만 제공
문자열, 숫자, 불리언 같은 원시값 에 대해 객체처럼 접근하면 생성되는 임시 객체 를 래퍼 객체(wrapper object) 라고 한다.
문자열, 숫자, 불리언 등의 원시값이 마치 객체처럼 마침표(.) 나 대괄호 표기법으로 접근하여 메서드를 호출할 수 있다.
예 ) 문자열 원시값에 대해, 마침표 표기법으로 접근하면, 그 순간 래퍼 객체인 String 생성자 함수의 인스턴스가 생성되고, 문자열은 래퍼 객체의 [[StringData]] 내부 슬롯에 할당
자바스크립트 엔진에 의해 어떤 객체보다도 먼저 생성되는 특수한 객체를 전역 객체라고 한다.
브라우저 환경에서는 window, self, this, frames 로 사용하며, Node.js 환경에서는 global 로 전역 객체에 접근
전역 객체는 다음의 특징을 갖는다.
전역 객체를 생성할 수 있는 생성자 함수가 제공되지 않는다.
전역 객체의 프로퍼티를 참조할 때, window(또는 global)를 생략할 수 있다.
전역 객체는 표준 빌트인 객체를 프로퍼티로 가진다
브라우저, Node.js 등 환경에 따라, 추가적인 프로퍼티/메서드를 갖는다.
var 키워드로 선언한 전역 변수와 선언하지 않은 변수에 값을 할당한 암묵적 전역, 전역 함수는 전역 객체의 프로퍼티가 된다.
let, const 키워드로 선언한 전역 변수는 전역 객체의 프로퍼티가 아니다. ( 즉, window(또는, global) 로 접근할 수 없다.)
이 키워드로 선언한 전역 변수는, 보이지 않는 개념적인 블록(전역 렉시컬 환경의 선언적 환경 레코드) ) 내에 존재하게 된다.
모든 자바스크립트 코드는 하나의 전역 객체를 공유한다.