holdanddeepdive/javascript-deep-dive

21장 빌트인객체

Opened this issue · 0 comments

객체의 분류

표준 빌트인 객체 ECMAScript

  • 전역객체의 프로퍼티로 제공됨
종류 생성자 함수 객체 생성자 함수가 아닌 객체
예시 String, Number, Boolean, Function, Array, Date 등 Math, Reflect, JSON
제공 프로토타입 메서드, 정적 메서드 정적 메서드
프로토타입 메서드 예시 Number.prototype.toFixed() -
정적 메서드 예시 Number.isInteager() Math.random()
  • 생성자 함수로 생성된 객체는 프로토타입 프로퍼티를 가짐
    • String 생성자 함수로 생성한 인스턴스의 프로토타입 => String.prototype

호스트 객체 환경에 따라 다름

  • 환경에서 추가 제공하는 객체

사용자 정의 객체 user defined


래퍼객체

  • 생성자 함수를 사용하지 않고 생성한 원시값이 객체처럼 동작하는 이유
    1. 리터럴 타입에서 프로토타입 메서드를 사용 "string".includes('s')
    2. 엔진이 일시적으로 원시값을 객체로 변환함
      • String 생성자 함수 인스턴스를 생성함(래퍼객체)
      • "string"을 래퍼객체의 내부슬롯 [[StringData]]에 할당함
    3. 메소드 호출 후 다시 원시값으로 돌려놓음
    4. 레퍼객체는 가비지 컬렉션의 대상이 됨
      • 래퍼객체는 필요할 때마다 일시적으로 생성됨
  • 래퍼객체를 생성하는 원시값: 문자열, 숫자, 불리언, 심벌
    • 심벌은 Symbol 함수로 생성(리터럴로 생성할 수 없다는 점이 다른 원시값과 다름)
    • null, undefined는 레퍼객체를 생성하지 않음

전역객체

전역객체의 프로퍼티

  • 표준 빌트인 객체(Object, String ...)
  • 호스트 객체(환경에 따른)
  • var 키워드로 선언한 전역변수,함수
console.log(y); // => undefined (호이스팅 O)
// console.log(x); // => Reference error (호이스팅 X)

x = 2; // 전역 프로퍼티이지만 호이스팅의 대상이 아님
var y = 2; // 전역 프로퍼티이자 전역 변수이기 때문에 delete로 삭제할 수 없음

console.log(delete x); // => true
// console.log(x); // => x is undefined

console.log(delete y); // => false