언어/JavaScript Deepdive

18장 : 빌트인 객체

MellowHoney 2024. 4. 1. 01:59
728x90
반응형

자바스크립트 객체의 분류

  • 표준 빌트인 객체: ECMAScript 사양에 정의된 객체이며, 애플레케이션 전역의 공통 기능을 제공한다.
  • 호스트 객체: JS실행환경 (브라우저 환경에선 WebApi or Node.js 환경에선 Node.js고유 API)에서 추가로 제공되는 객체
  • 사용자 정의 객체: 사용자가 직접 정의한 객체

표준 빌트인 객체

  • Object, String, Number, Boolean, Symbol, Date, Math, RegExp, Array, Map/Set, 등등의 표준 빌트인 객체가 존재

원시값과 래퍼 객체

const str = 'hello';

// 원시 타입인 문자열이 프로퍼티와 메서드를 갖고 있는 객체처럼 동작한다.
console.log(str.length); // 5
console.log(str.toUpperCase()); // HELLO

래퍼 객체 : 문자열, 숫자, 불리언 값에 대해 객체처럼 접근하면 생성되는 임시 객체

래퍼 객체로 프로퍼티에 접근하거나 메서드를 호출한 후, 다시 원시값으로 전환 --> Number인 숫자 값도 마찬가지로 래퍼 객체로 프로퍼티 메서드 접근 가능

전역 객체

  • JS엔진에 의해 어떤 객체보다도 먼저 생성되는 특수한 객체
    • 브라우저 --> window
    • Node.js --> global
  • ECMASCript 표준사양으로 globalThis라는 전역 객체를 가리키는 통일 식별자가 나옴.
  • 전역 객체는 표준 빌트인 객체와 호스트 객체, var키워드로 선언한 전역 변수와 전역 함수를 프로퍼티로 소유
  • 전역 객체 자신은 어떤 객체의 프로퍼티도 아니며 객체의 계층적 구조상 어떤 객체에도 속하지 않는, 최상위 객체

빌트인 전역 프로퍼티

  • Infinity(무한대)
  • NaN(숫자가 아님을 나타냄)
  • undefined

빌트인 전역 함수

  • eval (사용금지)
    • eval함수는 기존의 스코프를 런타임에 동적으로 수정
    • 'use strict'나 const, let을 사용하면 기존스코프를 수정하지 않고 eval함수 자체적인 스코프를 생성
    • 보안에 매우 취약하여 eval함수는 사용 금지
  • isFinite: 유한수인지 판별
  • isNaN: 전달받은 인수가 NaN인지 판별
  • parseFloat: 문자열을 실수로 해석하여 반환
  • parseInt: 문자열을 정수로 해석하여 반환
  • encodeURI / decodeURI : 완전한 URI를 문자열로 전달받아 이스케이프 처리를 위해 인코딩
    • (알파벳, 0~9숫자, 일부 특수문자는 이스케이프 처리에서 제외)
    • %, ?, # 은 의미를 갖고 있는 문자여서 처리
  • encodeURIComponent / decodeURIComponent : 쿼리스트링 구분자로 사용되는 =, ?, & 까지 인코딩

암묵적 전역

var x = 10;

function foo() {
  // 선언하지 않은 식별자에 값 할당
  y = 20;
}

foo();

// 선언하지 않은 식별자를 전역에서 참조 가능
console.log(x + y); // 30

암묵적 전역 : y는 마치 선언된 전역변수 처럼 동작. JS엔진인 window.y = 20으로 해석하기 때문에 전역 객체에 프로퍼티를 동적 생성.

  • 이러한 경우 변수가 아닌 프로퍼티로 추가되었기 때문에 변수 호이스팅이 발생하지 않고
  • (선언 전 y참조시 ReferenceError) delete로 프로퍼티를 삭제하는 것과 같이 삭제 가능
반응형