전역 객체(Global Object)
2024년 6월 21일
- 자바스크립트는 최상위에 1개의 전역 객체(Global Object)를 가진다.
자바스크립트의 동작과정
-
자바스크립트는 소스코드를 실행하기 전에, 최상위에 위치한 전역 객체(Global Object)를 만는다.
-
Math나 Date를 비롯한 몇몇 특별한 객체(Object)는 제외한다.
-
자바스크립트의 모든 객체와 값들은 이 전역 객체의 아래에 자손(descendants)으로 위치하게 된다.
-
전역 객체는 전체 코드에서 단 1개만 존재할 수 있으며, new 연산자를 이용하는 등의 방법으로 새롭게 만들 수 없다.
전역객체의 종류
-
이 전역객체의 이름은 자바스크립트를 사용하는 환경에 따라 얼마든지 달라질 수 있다.
-
웹 브라우저에서 사용되는 자바스크립트의 전역 객체는 window라는 이름의 객체(Object)이다.
-
한편 자바스크립트를 사용하는 서버인 노드(Node.js)에서는 global이라는 이름의 전역 객체가 있다.
-
최신 브라우저에서는 globalThis로 통합되어 있다.
전역객체의 특징
-
자바스크립트에서는 코딩할 때 전역 객체를 생략할 수 있다.
-
자바스크립트를 이용한 웹 개발 중에 자주 만나게 되는 객체(Object)들이 있다.
-
BOM(Browser Object Model)으로 만들어진 screen, navigator, history, location 객체나 document 객체가 바로 그것이다.
-
그런데 많은 자바스크립트 예제코드에서는 이들 객체 앞에는 아무런 부모객체도 쓰여있지 않은 것을 발견하게 된다.
JavaScript
- 이 코드가 정상적으로 작동하는 것은 바로 자바스크립트에서 코딩을 할 때 전역객체를 생략할 수 있기 때문에 가능하다.
- screen, navigator, history, location, document 등의 객체들은, 사실 모두 전역객체 window의 하위에 위치하고 있다.
- 따라서 위 코드는 아래처럼 전역객체인 window를 밝혀 적는다고 하더라도 동일하게 작동합니다.
JavaScript
- 마찬가지로 웹 개발을 하게 되면 수시로 만나게 되는 setInterval(), setTimeout(), alert(), confirm() 등도 대체로 그 앞에 아무 이름을 적지 않는 경우가 많다.
- 사실 많은 분들이 전역함수로 알고 있는 이들도 실은 전역객체인 window 아래에 있는 메서드(Method)들입니다. 따라서 아래와 같이 사용하여도 동일하게 작동한다.
JavaScript
- 반대로 많은 예제코드에서 관행적으로 window 객체를 밝혀서 사용하는 함수들도 있다.
- 팝업을 띄우는 window.open() 함수나 창을 닫는 window.close() 함수로 이들은 역으로 전역객체인 window를 생략해도 잘 작동한다.
JavaScript
모든 객체는 전역객체의 속성(property)입니다.
JavaScript
- callFunction();와 window.callFunction();는 모두 실행이 된다.
- 모든 전역변수와 함수는 사실 window 객체의 속성이다. 객
- 체를 명시하지 않으면 암시적으로 window의 속성으로 간주된다.
JavaScript
- 자바스크립트에서 모든 객체는 기본적으로 전역객체의 속성임을 알 수 있다.
- ECMAScript에서는 전역객체의 API를 정의해두었다.
- 그 외의 API는 호스트 환경에서 필요에 따라서 추가로 정의하고 있다.
- 이를테면 웹브라우저 자바스크립트에서는 alert()이라는 전역객체의 메서드가 존재하지만 node.js에는 존재하지 않는다.
- 또한 전역객체의 이름도 호스트환경에 따라서 다른데, 웹브라우저에서 전역객체는 window이지만 node.js에서는 global이다.
전역 속성(Global Property)
- 전역 속성은 전역 객체의 속성을 의미한다.
- 애플리케이션 전역에서 사용하는 값들을 나타내기 위해 사용한다.
- 전역 속성은 간단한 값이 대부분이며 다른 속성이나 메서드를 가지고 있지 않다.
Infinity
- Infinity 속성은 양/음의 무한대를 나타내는 숫자값 Infinity를 가진다.
JavaScript
NaN
- NaN 속성은 숫자가 아님(Not-a-Number)을 나타내는 숫자값 NaN을 가진다. NaN 속성은 Number.NaN 속성과 같다.
JavaScript
undefined
- undefined 속성은 기본 자료형 undefined를 값으로 가진다.
JavaScript