Search

빌트인 객체

21.1 자바스크립트 객체의 분류

표준 빌트인 객체
ECMAScript 사양에 정의된 객체로 어디에서나 사용할 수 있습니다.
호스트 객체
실행환경에서 추가로 제공하는 객체로 DOM, BOM, Canvas, XMLHttpRequest, fetch, requestAnimationFrame, SVG 등과 같은 클라이언트 사이드 Web API를 호스트 객체로 제공하고, Node.js 환경에서는 Node.js 고유 API를 호스트 객체로 제공한다.
사용자 정의 객체
사용자가 직접 정의한 객체

21.2 표준 빌트인 객체

Object, String, Number, Boolean 등 40여개의 빌트인 객체가 있다. Math, Reflect, JSON을 제외한 표준 빌트인 객체는 모든 인스턴스를 생설할 수 있는 생성자 함수 객체다.
생성자 함수 객체 표준 빌트인 객체 : 프로토타입 메서드와 정적 메서드를 제공하고 생성
생성자 함수 객체가 아닌 표준 빌트인 객체 : 정적 메서드만 제공
표준 빌트인 객체(생성자 함수인)가 생성한 인스턴스의 프로토타입은 표준 빌트인 객체의 prototype 프로퍼티에 바인딩된 객체이며 이렇게 바인딩된 객체는 다양한 기능의 빌트인 프로토타입 메서드를 제공한다.
// String 생성자 함수에 의한 String 객체 생성 const strObj = new String('Lee'); // String 생성자 함수를 통해 strObject 객체의 프로토타입은 String.prototype이다. console.log(Object.getPrototypeOf(strObj) === String.prototype); // true console.log(strObj.toUpperCase()) // LEE
JavaScript
복사

21.3 원시값과 래퍼 객체

원시값은 객체가 아니여서 프로퍼티나 메서드를 가질 수 없는데도 원시값인 문자열이 마치 객체처럼 동작한다. 이는 마침표 표기법등으로 접근하면, JS 엔진이 원시값을 연관된 객체로 변환해주기 때문이다. 이처럼 문자열, 숫자, 불리언 값에 대해 객체처럼 접근하면 생성되는 임시 객체를 래퍼 객체라고 한다.
const str = 'hi'; console.log(str.length); // 2 console.log(str.toUpperCase()); // HI console.log(typeof str); // string
JavaScript
복사
1.
문자열에 마침법 표기법으로 접근
2.
wrapper 객체인 String 생성자 함수의 인스턴스 생성
3.
문자열은 래퍼 객체의 [[StringData]] 내부 슬롯에 할당 → String 생성자 함수의 인스턴스는 String.prototype의 메서드를 상속 받아 사용 가능
4.
래퍼 객체의 처리가 종료되면 래퍼 객체의 [[StringData]] 내부 슬롯에 할당된 원시값으로 원래의 상태, 즉 식별자가 원시값을 갖도록 되돌리고 래퍼 객체는 가비지 컬랙션 대상이됨
문자열, 숫자, 불리언은 암묵적으로 생서되는 래퍼 객체에 의해 객체처럼 상요할 수 있으며, 표준 빌트인 객체의 프로토타입 메서드나 프로퍼티를 참조할 수 있다. 따라서 new를 이용해서 인스턴스를 생성하는 것을 권장하지 않는다.

21.4 전역 객체

전역객체는 코드가 실행되기 이전 먼저 생성되어있으며, 어떠한 객체에도 속하지 않는 최상위 객체다.
생성자 함수가 제공되지 않는다.
전역 객체의 프로퍼티 참조시 window를 생략가능
전역 객체는 Object 등 모든 표준 빌트인 객체를 프로퍼티로 가지고 있음
Js 실행 환경에 따라 추가적 프로퍼티와 메서드
var키워드로 선언한 전역변수와 선언하지 않은 변수에 값을 할당한 암묵적 전역, 그리고 전역함수는 전역객체의 프로퍼티가 됨
let, const는 불가
브라우저 환경의 모든 JS 코드는 하나의 전역 객체 window를 공유

21.4.1 빌트인 전역 프로퍼티

빌트인 전역 프로퍼티는 전역 객체의 프로퍼티를 의미하며 ,전역에서 사용하는 값을 제공한다.
Infinity
NaN
undefined

21.4.2 빌트인 전역 함수

eval : 코드 문자열을 인수로 받은 후 문자열을 인수로 받은 후 표현식이라면 값을 생성하고, 문이라면 런타임에 실행한다. 또한 기존 스코프를 런타임에 동적으로 수정한다. 그리고 let, const이거나 strict mode라면 독립적인 스코프를 만든다.
const x = 1; function foo(){ eval('var x = 2;'); console.log(x); // 2 } foo(); console.log(x); // 1
JavaScript
복사
isFinite : 유한수면 true, 무한수면 false, NaN은 false
isNaN : NaN인지 검사
parseFloat : 전달받은 문자열 인수를 실수로 해석
parseInt : 전달받은 인수를 정수로 해석, 2번째 인수를 통해 진법 결정
endcodeURI/decodeURI : 인코딩과 디코딩

21.4.3 암묵적 전역

선언하지 않은 식별자에 값을 할당하면 전역 객채의 프로퍼티가 된다. 이를 암묵적 전역이라고 한다.
따라서 이는 변수가 아니여서 변수 호이스팅이 발생하지 않는다.