globalThis

전역 globalThis 속성은 전역 this 값을 가진 전역 객체를 반환합니다.

Property attributes of globalThis
Writable yes
Enumerable no
Configurable yes

구문

globalThis

설명

역사적으로, 서로 다른 JavaScript 환경의 전역 범위에 접근하는건 서로 다른 구문을 필요로 했습니다. 웹에서는 window, self, frames를 사용할 수 있지만, Web Workers에서는 self만 동작합니다. Node.js에서는 아무것도 쓸 수 없고, 대신 global을 사용해야 합니다.
비엄격 모드에서의 함수 내부에서 this를 사용할 수도 있겠지만, 모듈이나 엄격 모드의 함수에서는 undefined를 가리키는 문제가 있습니다. Function('return this')()를 사용하는 방법도 존재하지만, 브라우저의 CSP 등으로 eval()을 사용할 수 없는 환경에선 Function도 이렇게 사용할 수 없습니다.

globalThis 속성은 환경에 무관하게 전역 this 값에 접근하는 표준 방법을 제공합니다. 비슷한 속성인 windowself와는 다르게 윈도우와 비윈도우 문맥 모두에서 동작을 보장할 수 있습니다. 따라서 코드를 구동하는 환경을 모르더라도 전역 객체에 일관적으로 접근할 수 있습니다.

HTML과 WindowProxy

많은 JavaScript 엔진에서 globalThis는 실제 전역 객체를 가리킬 것이나, 웹 브라우저는 <iframe>과 교차 창 보안 문제로 인하여 전역 객체의 Proxy를 대신 가리키고, 실제 객체는 직접 접근할 수 없습니다. 일반적인 사용처에서는 차이가 없다고 봐도 무방하지만, 알아두는 것은 중요합니다.

이름

selfglobal처럼, 다른 인기있던 제안은 기존 코드와의 호환성 문제를 우려해 제외됐습니다. 언어 제안서의 "NAMING" 문서를 방문해 더 자세한 정보를 읽어보세요.

예제

globalThis 없이 현재 환경의 전역 객체를 가져오는 방법 중 유일하게 믿을만한 방법은 Function('return this')() 입니다. 그러나 일부 환경에서는 CSP 위반을 초래하므로 es6-shim은 다음 예제와 같은 검사를 수행합니다.

var getGlobal = function () { 
  if (typeof self !== 'undefined') { return self; } 
  if (typeof window !== 'undefined') { return window; } 
  if (typeof global !== 'undefined') { return global; } 
  throw new Error('unable to locate global object'); 
}; 

var globals = getGlobal(); 

if (typeof globals.setTimeout !== 'function') { 
  // no setTimeout in this environment! 
}

globalThis를 사용할 수 있으면 환경에 따른 전역 객체 검사는 더 이상 필요하지 않습니다.

if (typeof globalThis.setTimeout !== 'function') {
  // no setTimeout in this environment!
}

명세

Specification
ECMAScript Latest Draft (ECMA-262)
The definition of 'globalThis' in that specification.

브라우저 호환성

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
globalThisChrome Full support 71Edge No support NoFirefox Full support 65IE No support NoOpera Full support 58Safari Full support 12.1WebView Android Full support 71Chrome Android Full support 71Firefox Android Full support 65Opera Android Full support 50Safari iOS Full support 12.2Samsung Internet Android Full support 10.0nodejs Full support 12.0.0

Legend

Full support  
Full support
No support  
No support

구현 진척도

본 기능은 아직 안정적인 크로스 브라우징에 도달하지 못했으므로, 매일 업데이트되는 아래 표에서 브라우저별 구현 상황을 확인할 수 있습니다. 이 데이터는 각 브라우저 JavaScript 엔진의 나이틀리 빌드 또는 최신 릴리즈판에서, JavaScript 표준 테스트인 Test262의 관련 항목을 시험해 생성합니다.