[모딥다] 21장.빌트인 객체

vanLan·2026년 2월 9일

모딥다

목록 보기
14/25
post-thumbnail

21장. 빌트인 객체

📁 자바스크립트 객체의 분류

  • 표준 빌트인 객체:
    • ECMAScript 사양에 정의된 객체.
    • 전역의 공통 기능을 제공.
    • ECMAScript 사양에 정의된 객체이므로 JS 실행 환경(브라우저 또는 Node.js 환경)과 관계없이 사용 가능.
    • 표준 빌트인 객체는 전역 객체의 프로퍼티로서 제공됨. 따라서 별도의 선언 없이 전역 변수처럼 언제나 참조 가능.
  • 호스트 객체:
    • ECMAScript 사양에 정의되어 있지 않지만 JS 실행환경에서 추가로 제공하는 객체.
    • 브라우저 환경: DOM, BOM, Canvas, XMLHttpRequest, fetch, requestAnimationFrame, SVG, Web Storage, Web Component, Web Worker와 같은 클라이언트 사이드 Web API를 호스트 객체로 제공.
    • Node.js: Node.js 고유의 API를 호스트 객체로 제공.
  • 사용자 정의 객체:
    • 사용자가 직접 정의한 객체

📁 표준 빌트인 객체

  • JS는 Object, String, Number, Boolean, Symbol, Date, Math, RegExp, Array, Map/Set, WeakMap/WeakSet, Function, Promise, Reflect, Proxy, JSON, Error 등 40여 개의 표준 빌트인 객체를 제공.
  • Math, Reflect, JSON을 제외한 표준 빌트인 객체는 모두 생성자 함수 객체임.
  • 생성자 함수 객체인 표준 빌트인 객체는 프로토타입 메서드와 정적 메서드를 제공.

📁 원시값과 래퍼 객체

  • 야래 코드를 보면 원시값은 객체가 아니므로 프로퍼티나 메서드를 가질 수 없는데, 원시값인 문자열이 마치 객체처럼 동작함.

    const str = 'hello';
    
    // 원시 타입인 문자열이 프로퍼티와 메서드를 갖고 있는 객체처럼 동작
    console.log(str.length);  // 5
    console.log(str.toUpperCase());  // HELLO
  • 원시값에 대해 객체처럼 접근하면 생성되는 임시 객체를 래퍼 객체라 함.

  • 동작원리: 원시값에 대해 마침표 표기법(또는 대괄호 표기법)으로 접근 -> JS엔진이 일시적으로 원시값과 연관된 객체의 인스턴스 생성 -> 생성된 래퍼 객체의 내부 슬롯에 원시값 할당 -> 사용 종료시 내부 슬롯의 원시값으로 되돌림 -> 생성되었던 래퍼 객체는 가비지 컬렉션의 대상이 됨.

  • 위와 같은 동작으로 생성된 래퍼 객체의 인스턴스는 프로토타입 메서드를 상속받아 사용할 수 있게 됨.

  • nullundefined는 래퍼 객체를 생성하지 않음.


📁 전역 객체

  • 코드가 실행되기 이전 JS엔진에 의해 어떤 객체보다 먼저 생성되는 특수한 객체. (어떤 객체에도 속하지 않는 최상위 객체)
  • JS환경에 따라 지칭하는 이름이 제각각
    • 브라우저: window, self, this, frames
    • Node.js: global

globalThis: ECMAScript2020에서 도입된 전역 객체를 가리키던 다양한 식별자를 통일한 식별자. globalThis는 표준 사양이므로 ECMAScript 표준 사양을 준수하는 모든 환경에서 사용 가능.

  • 전역객체는 표준 빌트인 객체, 호스트 객체, var 키워드로 선언한 전역 변수와 전역함수를 프로퍼티로 갖음.
  • 전역 객체는 계층적 구조상 어떤 객체에도 속하지 않은 모든 빌트인 객체의 최상위 객체(단, 이는 프로토타입 상속 관계상 최상위 객체란 의미와는 다름)
  • 전역 객체는 개발자가 의도적으로 생성할 수 없음. 전역 객체를 생성할 수 있는 생성자 함수는 제공되지 않음.
  • 전역 객체의 프로퍼티를 참조할 때 식별자를 생략할 수 있음.

빌트인 전역 프로퍼티

  • 빌트인 전역 프로퍼티는 전역 객체의 프로퍼티를 의미. 주로 애플리케이션 전역에서 사용하는 값을 제공
  • Infinity:
    • Infinity 프로퍼티는 무한대를 나타내는 숫자값 Infinity를 갖음.
  • NaN:
    • NaN 프로퍼티는 숫자가 아님을 나타내는 숫자값 NaN을 갖음.
  • undefined:
    • undefined 프로퍼티는 원시 타입 undefined를 값으로 갖음.

빌트인 전역 함수

  • 빌트인 전역 함수는 애플리케이션 전역에서 호출할 수 있는 빌트인 함수로서 전역 객체의 메서드임.
  • eval:
    • eval 함수는 JS 코드를 나타내는 문자열을 인수로 전달 받음.
    • 전달받은 문자열 코드가 표현식이라면 런타임에 평가하여 값을 생성하고, 전달받은 인수가 표현식이 아닌 문이라면 문자열 코드를 런타임에 실행함.
    • 보안 이슈로 사용 금지.
  • isFinite:
    • 전달받은 인수가 정상적인 유한수인지 검사하여 유한수이면 true, 무한수이면 false를 반환. NaN으로 평가되는 값이면 false를 반환.
  • isNaN:
    • 전달받은 인수가 NaN인지 검사하여 그 결과를 불리언 타입으로 반환. 전달받은 인수가 숫자가 아닌 경우 숫자 타입을 변환 후 검사를 수행.
  • parseInt:
    • 전달받은 문자열 인수를 정수로 해석하여 반환.
    • 두 번째 인수로 진법을 나타내는 기수 전달 가능.
    • 첫번째 인수가 두 번째 인수인 지수로 변환이 불가능 한 경우 NaN을 반환.
  • parseFloat:
    • 전달받은 문자열 인수를 부동 소수점 숫자, 실수로 해석하여 반환
  • encodeURI / decodeURI:
    • encodeURI 함수는 완전한 URI를 문자열로 전달받아 이스케이프 처리를 위해 인코딩 함.
    • decodeURI 함수는 인코딩된 URI를 인수로 전달받아 이스케이프 처리 이전으로 디코딩함.
  • encodeURIComponent / decodeURIComponent
    • encodeURIComponent 함수는 URI 구성 요소를 인수로 전달받아 인코딩 함.
    • decodeURIComponent 함수는 매개변수로 전달된 URI 구성 요소를 디코딩함.

암묵적 전역

  • JS엔진은 할당문을 만날 시 스코프 체인으로 스코프 어디에서도 변수 선언을 찾을 수 없으면 전역 객체에 프로퍼티를 동적으로 생성함. 이를 암묵적 전역 이라고 함.
  • 이때 생성되는 프로퍼티는 변수가 아니므로 호이스팅이 발생하지 않음.
  • 또한 변수가 아니라 단지 프로퍼티 이므로 delete 연산자로 삭제가 가능 (전역 변수는 프로퍼티이지만 delete 연산자로 삭제가 불가능)
profile
프론트엔드 개발자를 꿈꾸는 이

0개의 댓글