자바스크립트 객체의 분류

1. 표준 빌트인 객체

:ECMAScript 사양에 정의된 객체를 말한다. 애플리케이션 전역의 공통 기능을 제공한다.
표준 빌트인 객체는 자바스크립트 실행 환경과 관계없이 언제나 사용할 수 있다.
표준 빌트인 객체는 전역 객체의 프로퍼티로서 제공된다. 따라서 별도의 선언 없이 전역 변수처럼 언제나 참조 가능.

2. 호스트 객체

:ECMAScript 사양에 정의되어 있지 않지만 자바스크립트 실행 횐경에서 추가로 제공하는 객체.
브라우저 환경에서는 DOM, BOM, Canvas, XMLHttpRequest, fetch, requestAnimationFrame, SVG, Web Storage, Web Component, Web worker 와 같은 클라이언트 사이트 Web API 를 호스트로 제공하고 Node.js 환경에서는 Node.js 고유의 API를 호스트로 제공한다.

3. 사용자 정의 객체

사용자 정의 객체는 표준 빌트인 객체와 호스트 객체처럼 기본 제공되는 객체가 아닌 사용자가 직접 정의 객체


포준 빌트인 객체

자바스크립트는 40여 개의 표준 빌트인 객체를 제공한다.
Math, Reflect, JSON 을 제외한 표준 빌트인 객체는 모두 인스턴스를 생성할 수 있는 생성자 함수 객체다.
생성자 함수 객체인 표준 빌트인 깨체는 프로토타입 메서드와 정적 메서드를 제공한다.

생성자 함수인 표준 빌트인 객체가 생성한 인스턴스의 프로토타입은 표준 빌트인 객체의 prototype 프로퍼티에 바인딩된 객체다.

원시값과 래퍼 객체

문자열이나 숫자, 불리언 등의 원시값이 있는데도 문자열, 숫자, 불리언 객체를 생성하는 표준 빌트인 생성자 함수가 존재하는 이유는 무엇일까?

원시값은 객체가 아니므로 프로퍼티나 메서드를 가질 수 없지만 원시값인 문자열이 마치 객체처럼 동작한다.
(원시 타입인 문자열이 프로퍼티와 메서드를 갖고 있는 객체처럼 동작한다.)

이는 원시값인 문자열, 숫자, 불리언 값의 경우 이들 원시값에 대해 마치 객체처럼 마침표 표기법으로 접근하면 자바스크립트 엔진이 일시적으로 원시값을 연관된 객체로 변환해 주기 때문이다.
원시값을 객체처럼 사용하면 자바스크립트 엔진은 암묵적으로 연관된 객체를 생성하여 생성된 객체로 프로퍼티에 접근하거나 메서드를 호출하고 다시 원시값으로 되돌린다.

문자열, 숫자, 불리언 값에 대해 객체처럼 접근하면 생성되는 임시 객체를 래퍼 객체 라고 한다

원시값 심벌도 래퍼 객체를 생성한다.
심벌은 일반적인 원시값과는 달리 리터럴 표기법으로 생성할 수 없고 Symbol 함수를 통해 생성해야 하므로 다른 원시값과는 차이가 있다.

문자열, 숫자, 불리언, 심벌은 암묵적으로 생성되는 래퍼 객체에 의해 마치 객체처럼 사용할 수 있다.

전역 객체

전역 객체는 코드가 실행되기 이전 단계에 자바스크립트 엔진에 의해 어떤 객체보다도 먼저 생성되는 특수한 객체,
어떤 객체에도 속하지 않은 최상위 객체다.
전역 객체는 표준 빌트인 객체와 환경에 따른 호스트 객체 그리고 var 키워드로 선언한 전역 변수와 전역 함수를 프로퍼티로 갖느다.

전역 객체는 계층적 구조상 어떤 객체에도 속하지 않은 모든 빌트인 객체의 최상위 객체다.
전역 객체가 최상위 객체라는 것은 프로토타입 상속 관계상 최상위 객체라는 의미가 아니다.
전역 객체 자신은 어떤 객체의 프로퍼티도 아니며 객체의 계층적 구조상 표준 빌트인 객체와 호스트 객체를 프로퍼티로 소유한다는 것을 말한다.

let이나 const 키워드로 선언한 전역 변수는 전역 객체의 프로퍼티가 아니다.
let이나 const 키워드로 선언한 전역 변수는 보이지 않는 개념적인 블록(전역 랙시컬 환경의 선언적 환경 레코드) 내에 존재하게 된다.

브라우저 환경의 모든 자바스크립트 코드는 하나의 전역 객체를 공유한다.
여려 개의 script 태그를 통해 자바스크립트 코드를 분리해도 하나의 전역 객체를 공유하는 것은 변함이 없다.
이는 분리되어 있는 자바스크립트 코드가 하나의 전역을 공유한다는 의미다.

빌트인 전역 함수

빌트인 전역 함수는 애플리케이션 전역에서 호출할 수 있는 빌트인 함수로서 전역 객체의 메서드다.

isFinite
isNaN
parseFloat
parseInt
encodeURI
decodeURI
encodeURI 함수는 완전한 URI를 문자열로 전달받아 이스케이프 처리를 위해 인코딩한다.
인코딩이란 URI의 문자들을 이스케이프 처리하는 것을 의미한다.
이스케이프 처리는 네트워크를 통해 정보를 공유할 때 어떤 시스템에도 읽을 수 있는 아스키 문자 셋으로 변환하는 것.
URL 은 아스키 문자 셋으로만 구성되어야 하며 한글을 포함한 대부분의 외국어나 이스키 문자 셋에 정의되지 않은 특수 문자의 경우 URL에 포함될 수 없다.
따라서 URL 내에서 의미를 갖고 있는 문자나 올 수 없는 문자 (한글, 공백 등) 또는 시스템에 의해 해석될 수 있는 문자를 이스케이프 처리하여 야기될 수 있는 문제들을 예방하기 위해 이스케이프 처리가 필요하다.

profile
프론트 공부중입니다!

0개의 댓글