하루 30분 모던 자바스크립트 딥 다이브 빌트인 객체

자바스크립트 객체의 분류

  1. 표준 빌트인 객체
    1. ECMAScript 사양에 정의된 객체
    2. 전역 객체의 프로퍼티로서 제공
  2. 호스트 객체
    1. ECMAScript 사양에는 정의 되어있지 않지만, 브라우저 환경 또는 Node.js 환경에서 추가로 제공하는 객체
    2. 브라우저 환경에선 DOM, BOM, Canvas, XMLHttpRequest, fetch, requestAnimationFram, SVG, Web Storage, Web Component, Web Worker와 같은 클라이언트 사이드 Web API를 호스트로 제공,
    3. node.js 환경에서는 고유의 API를 호스트 객체로 제공
  3. 사용자 정의 객체
    1. 사용자가 직접 정의한 객체

표준 빌트인 객체

  1. 표준 빌트인 객체에는 다양한 생성자 함수가 있음
  2. 생성자 함수로 생성한 인스턴스의 프로토타입은 생성자 함수의 prototype 프로퍼티에 바인딩 되어있는 객체. 이 객체는 다양한 기능의 빌트인 프로토타입 메서드를 제공.
  3. 표준 빌트인 객체는 인스턴스 없이도 호출 가능한 빌트인 정적 메서드를 제공

원시값과 래퍼 객체

  1. 원시값은 객체가 아닌데, 마치 객체처럼 동작한다.
  2. 원시값에 객체처럼 마침표 표기법(혹은 대괄호 표기법)으로 접근하면 자바스크립트 엔진이 일시적으로 객체로 변환해준다. 이후 다시 원시값으로 되돌린다.
  3. 객체처럼 접근하면 생성되는 임시 객체를 래퍼 객체라고 한다.
  4. 식별자가 원시값으로 되돌아가면 래퍼 객체는 가바지 컬렉션의 대상이 된다.
  5. ES6에 도입된 심벌 객체도 래퍼 객체를 생성하지만, 심벌은 Symbol 함수를 통해 생성하므로 원시값과는 차이가 있다.

전역 객체

  1. globalThis는 ES11에 도입된 것으로 전역 객체를 가리키는 다양한 식별자를 통일한 식별자.
  2. 전역 객체는 다양한 표준 빌트인 객체와 var키워드로 선언한 전역 변수와 전역 함수를 프로퍼티로 갖는다.
  3. 최상위 객체다.
  4. 전역 객체는 개발자가 의도적으로 생성할 수 없다.
  5. 전역 객체의 프로퍼티를 참조할 때 window(또는 global) 생략 가능.
  6. 선언하지 않은 변수를 할당한 암묵적 전역은 전역 객체의 프로퍼티가 된다.

빌트인 전역 프로퍼티

  1. Infinity 무한대를 나타냄
  2. NaN
  3. undefined

빌트인 전역 함수

  1. eval()
    1. 문자열을 인수로 전달받고, 문자가 표현식이라면 런타임에 평가한 값을, 문이라면 문자열 코드를 런타임에 실행한다.
    2. 기존의 스코프를 동적으로 수정한다
    3. 사용자로 부터 입력받은 콘텐츠를 실행시켜 보안에 매우 취약 절대 사용 금지
    4. 자바스크립트 엔진 최적화가 수행되지 않아서 느리다.
  2. isFinite() 유한수 인지 검사. isFinite(null)은 true값이다.
  3. isNaN() 숫자타입으로 변환 후 NaN인지 검사
  4. parseFloat 실수로 해석
  5. parseInt 정수로 해석
  6. encodeURI / decodeURI 와 encodeURIcomponent / decodeURIcomponent
    1. 컴포넌트는 =, ?, &까지 인코딩 한다.
    2. encodeURI / decodeURI 는 =, ?, &을 인코딩 하지 않는다.
    인코딩? 이스케이프 처리?
    1. 이스케이프 처리는 네트워크를 통해 정보를 공유할 때 어떤 시스템에서도 해석할 수 있게 아스키 문자 셋으로 변환하는 것
    2. 인코딩은 URI 문자들을 이스케이프 처리하는 것

암묵적 전역

  1. 선언하지 않은 변수를 할당하는 것
  2. 선언하지 않은 변수는 전역 객체의 프로퍼티가 된다.
  3. 변수는 선언 없이 전역 객체의 프로퍼티로 추가된 것일 뿐이다. 따라서 변수가 아니므로 변수 호이스팅이 발생하지 않는다.