-
Section 6. 자바스크립트 전역 객체와 표준 빌트인 객체자바스크립트 2023. 3. 30. 14:27
I. 전역 객체 global object
코드로 선언하거나 하지 않아도 전역 범위에 항상 존재하는 객체이다.
console.log(this); //Window {window: Window, self: Window, document: document, name: '강남', location: Location, …} console.log( this === window, window === self, self === frames );//true true true
브라우저 콘솔에서 console.log(this)를 실행하면 많은 양의 객체들이 있는 것을 확인 할 수 있다.
이렇게 따로 선언하지 않았음에도 아무때나 가져다 쓸 수 있는 객체들을 바로 전역 객체라고 한다.
전역 객체에 포함되는 것
1. 표준 빌트인 객체
2. 호스트 객체 - 환경에서 제공하는 기타 객체들 : 브라우저의 Web API, Node.js API등
3. (브라우저 한정) - 전역으로 설정된 var 변수와 전역 함수
II. 표준 빌트인 객체 standard built-in objects
특징은 다음과 같다
- ECMAScript 사양에 정의된 객체들 - 어떤 환경에서든 사용가능한 객체들이다.
- 전역 프로퍼티로 제공됨 - globalThis등을 붙이지 않고 바로 사용 가능하다.
// 그러나 요소들로 갖고 있는 것은 확인 가능 console.log(globalThis.Infinity); console.log(globalThis.isNaN); console.log(globalThis.Object); // 그러나 요소들로 갖고 있는 것은 확인 가능 console.log(Infinity); console.log(isNaN); console.log(Object);
globalThis를 생략해도 출력문은 같다. 브라우저 콘솔창에서 직접 실행해보면 알 수 있다.
III. 래퍼 객체 wrapper object
const str = 'abcde'; console.log( str.length, str.toUpperCase(), str[0] ); //5 'ABCDE' 'a' const num = 123.4567; console.log( typeof num.toString(), num.toFixed(2) ); //string 123.46
str은 그냥 문자열인 원시값을 가지고 있다. 다른 기능이 아니라 문자열만 가지고 있다.
근데 원시값을 가지고 있을 뿐인데 length, toUpperCase(), []배열처럼 접근이 가능한 것을 볼 수 있다. 또 출력을 해보면 정상적으로 출력이 되는 것을 알 수 있다.
number도 마찬가지이다. toString이라는 메서드를 가지고 있고 toFixed라는 메서드도 가지고 있고 실행해 봤을때 정상적으로 실행이 된다.
원시값이 어떻게 프로퍼티를 가지고 있는지 한번 살펴보면 다음과 같다.
const str = new String('abcde'); const num = new Number(123.4567); const bool = new Boolean(true); console.log(typeof str, str); //object String {'abcde'} console.log(typeof num, num); //object Number {123.4567} console.log(typeof bool, bool); //object Boolean {true}
문자열 abcde를 펼처보면 배열과도 같이 되어있는 것을 볼 수 있다. 그리고 프로토타입으로 많은 함수들이 있는 것을 볼 수 있다. 즉, 프로토타입을 통해 이런 함수들을 선언을 하지 않아도 언제든지 끌어다가 쓸 수 있는 것이다.
*Number, String, Boolean 등은 표준 빌트인 객체에 속하는 래퍼 객체이다.
- 원시값을 필요시 래퍼객체로 감싸서 그것의 인스턴스로 만들어 기능을 실행한다
- 원시값에서 객체를 사용하듯 해당 래퍼 객체의 프로퍼티를 호출할 때 래핑이 발생한다.
해당 기능 사용 후에는 원시 객체로 돌아간다. -메모리 절약
const str = 'abcde'; console.log(str.length); //5 console.log(typeof str, str); //string abcde
str.length를 했을때 만큼은 str이 string이란 타입의 객체가 되는 것이다(원래는 그냥 원시타입의 자료인데). 그리고 일이 끝나면 다시 원래 원시타입의 자료형으로 돌아가는 것을 볼 수 있다.
'자바스크립트' 카테고리의 다른 글
Section 6. 자바스크립트 String 객체 (0) 2023.03.30 Section 6. 자바스크립트 빌트인 전역 프로퍼티와 함수 (0) 2023.03.30 Section 5. 자바스크립트 객체의 스프레드와 디스트럭쳐링 (0) 2023.03.30 Section 5. 자바스크립트 상속 (0) 2023.03.30 Section 5. 자바스크립트 접근자 프로퍼티와 은닉 (0) 2023.03.30