자바스크립트 객체의 분류
- 표준 빌트인 객체
- 객체의 분류
- 생성자 함수 객체
- 생성자 함수 객체가 아닌 경우(Math, Reflect, JSON)
- 원시값과 래퍼 객체
: ECMAScript 사양에 정의된 객체로, 애플리케이션 전역의 공통 기능을 제공한다.
자바스크립트의 실행 환경에 관계없이 언제나 사용할 수 있으며, 전역 객체의 프로퍼티로서 제공되기 때문에 별도의 선언 없이 전역 변수처럼 언제나 참조할 수 있다.
별도의 인스턴스 없이 빌트인 정적 메서드를 호출할 수 있다.
: 프로토타입 메서드와 정적 메서드 제공

: 정적 메서드 제공

: 문자열, 숫자, 불리언 등 원시값이 존재하는데도 표준 빌트인 생성자 함수가 존재하는 이유?
원시값은 객체가 아니므로 프로퍼티나 메서드를 가질 수 없지만, 마침표 표기법으로 접근하면 자바스크립트 엔진이 일시적으로 원시값을 연관된 객체로 생성해준다.
이때 일시적으로 생성되는 객체를 래퍼 객체라고 한다.


마침표 표기법으로 접근하면 그 순간 String 생성자 함수의 인스턴스가 생성되고, 문자열은 래퍼 객체의 [[StringData]] 내부 슬롯에 할당되며, String.prototype의 메서드를 상속받아 사용할 수 있다.
이 후, 래퍼 객체의 처리가 종료되면 래퍼 객체 [[StringData]] 내부 슬롯에 할당된 원시값으로 원래의 상태, 즉 식별자가 원시값을 갖도록 되돌리고 해당 래퍼 객체는 가비지 컬렉션의 대상이 된다.

문자열, 숫자, 불리언 값은 생성자 함수를 이용해 인스턴스를 생성할 필요가 없으며, 권장되지 않는다. 심벌의 경우에는 Symbol 함수를 이용해야 하지만, 생성자 함수가 아니므로 논의에서 제외된다.
null, undefined의 경우, 객체처럼 사용하면 에러가 발생한다.

- 호스트 객체
- 전역 객체
- 빌트인 전역 프로퍼티
- Infinity
- NaN
- undefined
- 빌트인 전역 함수
- eval
- isFinite
- isNaN
- parseFloat
- parseInt
- encodeURI/decodeURI
- encodeURIComponent/decodeURIComponent
- 암묵적 전역
: ECMAScript 사양에 정의되어 있지 않지만 자바스크립트 실행 환경(브라우저 환경, Node.js 환경)에서 추가로 제공하는 객체를 말한다.
: 코드가 실행되기 이전 단계에 자바스크립트 엔진에 의해 어떤 객체보다도 먼저 생성되는 특수한 객체이며, 어떤 객체에도 속하지 않는 최상위 객체다.
어떤 객체의 프로퍼티가 아니며 객체의 계층적 구조상 표준 빌트인 객체와 호스트 객체를 프로퍼티로 소유한다는 것!

표준 빌트인 객체와 환경에 따른 호스트 객체, var 키워드로 선언한 전역 변수와 전역 함수를 프로퍼티로 갖는다.

: 전역 객체의 프로퍼티
: 무한대를 나타내는 숫자값
: 숫자가 아님(Not-a-Number)을 나타내는 숫자값
: 원시 타입 undefined
: 어플리케이션 전역에서 호출할 수 있는 빌트인 함수로서 전역 객체의 메서드
: 자바스크립트 코드를 나타내는 문자열을 인수로 받아, 문자열 코드를 런타임에 평가해 값을 생성하거나 실행한다.
자신이 호출된 위치에 해당하는 기존의 스코프를 런타임에 동적으로 수정한다.


eval 함수를 통해 사용자로부터 입력받은 콘텐츠를 실행하는 것은 보안에 매우 취약하며, 해당 코드는 자바스크립트 엔진에 의해 최적화가 수행되지 않으므로 처리 속도가 느리다.
따라서, eval 함수의 사용은 금지해야 한다.
: 전달받은 인수가 정상적인 유한수인지 검사하여 불리언 값을 반환하는 함수
: 전달받은 인수가 NaN인지 검사하여 불리언 값을 반환하는 함수
: 전달받은 문자열 인수를 실수로 해석하여 반환하는 함수
: 전달받은 문자열 인수를 정수로 해석하여 반환하는 함수
: 완전한 URI를 문자열로 전달받아 이스케이프 처리를 위해 인코딩하거나 이스케이프 처리 이전으로 되돌려 반환하는 함수
: URI 구성 요소를 인수로 전달받아 인코딩하거나 디코딩해 반환하는 함수
: 선언하지 않은 식별자에 값을 할당하면 전역 객체의 프로퍼티로 등록되며, 마치 전역 변수처럼 동작한다.


변수 선언 없이 단지 전역 객체의 프로퍼티로 추가되었기 때문에, 변수가 아니므로 변수 호이스팅이 발생하지 않는다.
또한, 전역 객체의 프로퍼티이기 때문에 delete 연산자로 삭제가 가능하다.
- 사용자 정의 객체
: 표준 빌트인 객체와 호스트 객체처럼 기본 제공되는 객체가 아닌 사용자가 직접 정의한 객체