21장: 빌트인 객체

원시값인 String, Number, Boolean 값의 경우, 점을 찍을 경우, 이들 원시값에 대해 마치 객체처럼 JS 엔진이 일시적으로 원시값을 연관된 객체로 변환해준다 (=Wrapper object). 사용후 다시 원시값으로 복구해두고 래퍼객체는 GC가 처리한다. (궁금, 성능 문제 있으려나?)

const str = 'hello';

// 원시 타입인 문자열이 프로퍼티와 메서드를 갖고 있는 객체처럼 동작한다.
console.log(str.length); // 5
console.log(str.toUpperCase()); // HELLO
// ------------------------------------------
const str = 'hello';
str.name = 'Lee';
// 새로운 래퍼 객체 생성 해서 name을 찾는다.
console.log(str.name); // undefined

따라서 String, Number, Boolean 생성자 함수를 new 연산자와 함께 호출하여 인스턴스를 생성할 필요가 없으며 권장하지도 않는다.

전역 객체 (window)

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

표준 빌트인 객체(object, string, Number, Function, Array 등)와 환경에 따른 호스트 객체(클라이언트 Web API 또는 Node.is의 호스트 APT), 그리고 var로 선언한 전역 변수와 전역 함수를 프로퍼티로 갖는다.

  • 전역 객체 특징

    • 개발자가 의도적으로 생성할 수 없다. 즉, 전역 객체를 생성할 수 있는 생성자 함수가 제공되지 않는다.

    • 프로퍼티를 참조할 때 window를 생략할 수 있다.

    • Object, String, Number, Boolean, Function, Array, RegExp, Date, Math, Promise 같은 모든 표준 빌트인 객체를 프로퍼티로 가지고 있다.

    • 실행 환경에 따라 추가적으로 프로퍼티와 메서드를 갖는다. 브라우저 환경에서는 DOM, BOM, Canvas, XMLHttpRequest, fetch, requestAnimationFrame, SVG, Web Storage, Web Component, Web Worker 같은 클라이언트 사이드 Web API를 호스트 객체로 제공한다.

    • var로 선언한 전역 변수와 선언하지 않은 변수에 값을 할당한 암묵적 전역, 그리고 전역 함수는 전역 객체의 프로퍼티가 된다.

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

      • 궁금, 그럼 한 탭에 있는 것만 해당되겠지??

        • ES6 부터는 스크립트 별로 독립된 환경을 만들어주는것 같다.

빌트인 전역 프로퍼티 (Infinity, NaN, undefined)

빌트인 전역 함수 (eval, isFinite, isNaN, parseFloat)

parseInt() decodeURI() decodeURIComponent() encodeURI() encodeURIComponent()

전역 객체의 프로퍼티는 호이스팅이 되지 않는다.

Last updated