[JS] 빌트인 객체란?

hahaha·2021년 8월 9일
0

JavaScript

목록 보기
9/24
post-thumbnail

들어가기 전에

자바스크립트 객체의 분류

1. 표준 빌트인 객체

  • ECMAScript 사양에 정의된 객체

2. 호스트 객체

  • 자바스크립트 실행 환경에서 추가로 제공하는 객체

3. 사용자 정의 객체

  • 사용자가 직접 정의한 객체

표준 빌트인 객체

  1. 인스턴스를 생성할 수 있는 생성자 함수 객체
    • Math. Reflect, JSON 제외한 모든 객체
    • 프로토타입 메서드와 정적 메서드 제공
    • 생성한 인스턴스의 프로토타입은 표준 빌트인 객체의 prototype 프로퍼티에 바인딩된 객체이다.
// String 생성자 함수에 의한 String 객체 생성
const strObj = new String('Lee');	// String {"Lee"}

console.log(typeof strObj);		// object
console.log(Object.getPrototype(strObj) === String.prototype); 	// true
const numObj = new Number(1.5);		// Number {1.5}

// toFixed 는 Number.prototype의 프로토타입 메서드이다.
console.log(numObj.toFixed()); 		// 2

// isInteger는 Number의 정적 메서드이다.
console.log(Number.isInteger(0.5));	// false;
  1. 생성자 함수 객체가 아닌 객체
    • Math. Reflect, JSON 객체
    • 정적 메서드만 제공

정적 메서드

인스턴스 없이 정적으로 호출할 수 있는 메서드

원시값과 래퍼 객체

래퍼 객체

  • 원시 타입의 값에 대해 객체처럼 접근하면 생성되는 임시 객체
  • JS 엔진이 암묵적으로 연관된 객체를 생성하여
    생성된 객체로 프로퍼티나 메서드에 접근한 후, 다시 원시값으로 되돌림
const str = 'hi';

// 래퍼 객체인 String 생성자 함수의 인스턴스가 생성되고
// 문자열은 래퍼 객체의 [[StringData]] 내부 슬롯에 할당된다.
console.log(str.length); 	// 2
console.log(str.toUpperCase()); // HI

// 래퍼 객체로 프로퍼티에 접근하거나 메서드를 호출한 후, 다시 원시값으로 되돌린다.
// 이후 래퍼 객체는 가비지 컬렉션의 대상이 된다.
console.log(typeof str); 	// string
  • 문자열, 숫자, 불리언, 심벌은 래퍼 객체에 의해 객체처럼 사용 가능
  • 표준 빌트인 객체인 String, Number, Boolean, Symbol의 프로토타입 메서드 / 프로퍼티 참조 가능
  • 생성자 함수를 사용하여 인스턴스를 생성할 필요 X

전역 객체

  • 코드 실행 전, JS 엔진에 의해 어떤 객체보다 먼저 생성되는 최상위 객체
  • JS 환경에 따라 이름 상이함
    - 브라우저: window(or self, this, trames)
    - Node.js: global
    + globalThis(ES11): ECMAScript 표준 사양을 준수하는 모든 환경에서 사용가능한 식별자
  • 개발자가 의도적으로 생성할 수 X
  • 전역 객체의 프로퍼티를 참조할 때, window or global 생략 가능
  • 브라우저 환경의 모든 JS 코드는 하나의 전역 객체를 공유

- 빌트인 전역 프로퍼티: 전역 객체의 프로퍼티

1. Infinity

  • 무한대를 나타내는 숫자값
  • -Infinity도 존재

2. NaN

  • 숫자가 아님을 나타내는 숫자값
  • Not-a-Number

3. undefined

  • 원시타입 undefined

- 빌트인 전역 함수: 전역 객체의 메서드

1. eval

  • JS 코드를 나타내는 문자열을 인수로 전달 받음
  • 주어진 문자열 코드를 런타임에 평가 또는 실행
  • 기존 스코프를 런타임에 동적으로 수정
  • 객체와 함수 리터럴은 반드시 괄호로 둘러싼다.
  • JS 엔진에 의해 최적화 수행 X -> 처리 속도 느림
  • 사용 금지....
const o = eval('({ a : 1})');
console.log(o); // {a:1}

2. isFinite

  • 전달받은 인수가 정상적인 유한수인지 검사하여 불리언 타입으로 반환
  • 숫자로 자동 타입 변환 실행됨

3. isNaN

  • 전달받은 인수가 NaN인지 검사하여 불리언 타입으로 반환
  • 숫자로 자동 타입 변환 실행됨

그외

  • parseFloat
  • parseInt
  • encodeURI / decodeURI
profile
junior backend-developer 👶💻

0개의 댓글