독서

빌트인 객체

als982001 2023. 2. 4. 21:26

자바스크립트 객체는 표준 빌트인 객체, 호스트 객체, 사용자 정의 객체로 분류할 수 있다.

  • 표준 빌트인 객체
    • Object, String, Number, Boolean, Symbol, Date, Math, RegExp, Array, Map/Set, WeakMap/
      WeakSet, Function, Promise, Reflect, Proxy, JSON, Error 등40 여개가 있음.
    • 표준 빌트인 객체인 String, Number, Boolean, Function, Array, Date는 생성자 함수로 호출하여 인스턴스 생성 가능
  • 래퍼 객체: 문자열, 숫자, 불리언 값에 대해 객체처럼 접근하면 생성되는 임시객체. 원시값을 객체처럼 사용하면 자바스크립트 엔진은 암묵적으로 연관된 객체를 생성하여 생성된 객체를 프로퍼티에 접근하거나 메서드를 호출하고 다시 원시값으로 되돌림.
  • 전역 객체(Global Object): 코드가 실행되기 이전 단계에 자바스크립트 엔진에 의해 어떤 객체보다도 먼저 생성되는 특수한 객체이며 어떤 객체에도 속하지 않은 최상위 객체
    • 브라우저 환경에서는 window(또눈 self, this, frames), Node.js 환경에서는 global이 전역 객체를 가리킴.
    • 전역 객체는 개발자가 의도적으로 생성할 수 없다.
    • 전역 객체의 프로퍼티를 참조할 때 window 또는 global을 생략할 수 있다.
    • 전역 객체는 모든 표준 빌트인 객체를 프로퍼티로 가지고 있다.
    • 자바스크립트 실행 환경에 따라 추가적으로 프로퍼티와 메서드를 갖는다.
      • 브라우저 환경에서는 DOM, BOM, Canvas, XMLHttpRequest, fetch, requestAnimationFrame, SVG, Web Storage, Web Component, Web Worker같은 클라이언트 사이드 Web API를 호스트 객체로 제공
      •  Node.js 환경에서는 Node.js 고유의 API 7를 호스트 객체로 제공
      • var 키워드로 선언한 전역 변수와 선언하지 않은 변수에 값을 할당한 암묵적 전역, 전역 함수는 전역 객체의 프로퍼티가 됨
      • let이나 const 키워드로 선언한 전역 변수는 전역 객체의 프로퍼티가 아니기 때문에 window.~와 같이 접근할 수 없음.
      • 브라우저 환경의 모든 자바스크립트 코드는 하나의 전역 객체 window를 공유함.
    • 빌트인 전역 프로퍼티(built-in global property): 전역 객체의 프로퍼티. 주로 애플리케이션 전역에서 사용하는 값 제공
      • Infinity: 무한대
      • NaN: 숫자가 아님(Not-a-Number)
      • undefined
    • 빌트인 전역 함수(Built-in global function): 애플리케이션 전역에서 호출할 수 있는 빌트인 함수. 전역 객체의 메서드이다.
      • eval: 자바스크립트 코드를 나타내는 문자열을 인수로 전달 받아, 그 문자열 코드가 표현식이라면 값을 생성하고 문이라면 문자열 코드를 런타임에 실행함.
      • isFinite:  전달받은 인수가 정상적인 유한수라면 true를, 아니면 false를 반환함.
      • isNaN: 전달받은 인수가 NaN인지 검사하여 결과를 boolean 타입으로 반환함.
// 표준 빌트인 객체 중 일부는 생성자 함수로 호출하여 인스턴스 생성 가능
const numberObject = new Number(123);
console.log(numberObject); // [Number: 123]
console.log(typeof numberObject); // object

// 래퍼 객체
const yourName = "Gildong";
console.log(yourName.length); // 7
console.log(yourName.toUpperCase()); // GILDONG

// Infinity, NaN
console.log(3 / 0 === Infinity); // true
console.log(Number("abc")); // NaN