빌트인 객체 


자바스크립트 객체 분류

 

표준 빌트인 객체 ( Standard built-in object/native object/global objects )

ECMAScript 사양에 정의된 객체이며, 자바스크립트 실행환경과 상관없이 언제나 사용할 수 있다.

별도의 선언 없이 전역 변수처럼 언제나 참조할 수 있다.

 

호스트 객체 ( host object )

클라이언트 사이드 Web API를 호스트 객체로 제공하고, Node.js 환경에서는 고유의 API를 호스트 객체로 제공한다. 

 

사용자 정의 객체 ( user-defined objects ) 

기본 제공되는 객체가 아닌 사용자가 직접 정의한 객체 

 


표준 빌트인 객체 중 Math, Reflect, JSON을 제외한 모든 객체는 인스턴스를 생성할 수 있는 생성자 함수 객체이다. 

이때 생성된 인스턴스의 프로토타입은 표준 빌트인 객체의 프로토타입 프로퍼티에 바인딩 된다. 

 

원시 값과 래퍼 객체

원시값들은 객체가 아니니까 프로퍼티나 메소드를 가질 수 없음에도 메소드들이 먹히는 것을 코딩하면서 자연스레 알게 되었을 것이다. 

원시값 str 문자열이 메소드 먹히는 모습

원시값을 객체처럼 사용하면 자바스크립트 엔진에서 암묵적으로 연관된 객체를 생성 후 그 개체를 통해 프로퍼티에 접근해서 메소드를 호출하고 다시 값을 되돌린다고 한다. 이렇게 원시값에 대해 객체처럼 접근하면 생성되는 임시 객체를 래퍼 객체(wrapper object)라고 한다. 그렇게 메소드 호출 후 처리가 끝나면 래퍼 객체는 식별쟈가 원시값을 갖도록 되돌리고, 가비지 컬랙션의 대상이 된다. 그리고 null 과 undefined에 대해서는 래퍼 객체를 생성하지 않는다. 

 

 


전역객체(global object)

코드가 실행되기 이전 단계에서 자바스크립트 엔진에 의해 어떤 객체보다도 먼저 생성되는 특수한 객체이며, 어떤 객체에도 속하지 않는 최상위 객체이다. 

 

식별자가 window와 Node.js 환경에서 각자 달랐지만 ES11에서 도입된 globalThis 라는 식별자로 통일해서 사용이 가능해 졌다.

 

전역 객체 특징

- 개발자가 의도적으로 생성할 수 없다.

- 전역 객체의 프로퍼티를 참조할 때, 식별자를 생략할 수 있다. 

- 모든 표준 빌트인 객체를 프로퍼티로 가지고 있다.

- 자바스크립트 실행 환경에 따라 추가적으로 프로퍼티와 메소드를 갖는다. 

- var 키워드로 선언한 전역 변수와, 암묵적 전역, 전역 함수들은 전역 객체의 프로퍼티가 된다. 

- let, const 키워드로 선언한 전역 변수는 개념적인 블록(전역 렉시컬 환경의 선언적 환경 레코드 ) 내에 존재하게 된다.

- 브라우저 환경의 모든 자바스크립트 코드는 하나의 전역 객체 window를 공유한다. 


빌트인 전역 프로퍼티

전역 객체의 프로퍼티를 의미하고, 애플리케이션 전역에서 사용하는 값을 제공한다. 

 

infinity  - 무한대를 나타내는 숫자 값을 갖음 

NaN - 숫자가 아님을 나타내는 값을 갖는다. 

undefined 

 

빌트인 전역 함수

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

 

eval ()

문자열 코드가 표현식이면, 런타임에 평가해 값을 생성하고, 표현식이 아닌 문이면 런타임에 실행을 한다. 

하지만 일반 eval() 함수는 자체는 일반적인 코드 샐행에 비해 처리속도가 느리고 보안에 매우 취약하기 때문에 사용을 지양해야한다.

 

 

 

isFinite() - 전달받은 인수가 유한수라면 true, 무한수라면 false를 반환하는 메소드이다. falsy값들은 false로 반환한다. 

isNaN() - 전달받은 인수가 NaN인지 검사하여 불리언 타입으로 반환한다. 이미 많이 사용해보신분들이 많을거라 생각한다. 

parseFloat() - 전달받은 문자열 인수를 부동 소수점 숫자, 실수로 해석하여 반환한다. 

parseInt() - 전달받은 문자열 인수를 정수로 해석하여 반환한다.  

encodeURI  - 완전한 URI ( Uniform Resource Identifier )를 문자열로 전달받아 이스케이프 처리를 위해 인코딩한다. 

decodeURI -  인코딩된 URI를 인수로 전달받아 이스케이프 처리 이전으로 디코딩한다. 

encodeURIComponent - encodeURI와 같이 인코딩하지만 쿼리 스트링 구분자인 =,?,& 까지 인코딩한다.

decodeURIComponent - decodeURI와 같이 인코딩하지만 쿼리 스트링 구분자인 =,?,& 까지 디코딩한다.