globalThis - JavaScript 编辑
The global globalThis
property contains the global this
value, which is akin to the global object.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Property attributes of globalThis | |
---|---|
Writable | yes |
Enumerable | no |
Configurable | yes |
Description
Historically, accessing the global object has required different syntax in different JavaScript environments. On the web you can use window
, self
, or frames
- but in Web Workers only self
will work. In Node.js none of these work, and you must instead use global
.
The this
keyword could be used inside functions running in non–strict mode, but this
will be undefined
in Modules and inside functions running in strict mode. You can also use Function('return this')()
, but environments that disable eval()
, like CSP in browsers, prevent use of Function
in this way.
The globalThis
property provides a standard way of accessing the global this
value (and hence the global object itself) across environments. Unlike similar properties such as window
and self
, it's guaranteed to work in window and non-window contexts. In this way, you can access the global object in a consistent manner without having to know which environment the code is being run in. To help you remember the name, just remember that in global scope the this
value is globalThis
.
HTML and the WindowProxy
In many engines globalThis
will be a reference to the actual global object, but in web browsers, due to iframe and cross-window security considerations, it references a Proxy
around the actual global object (which you can't directly access). This distinction is rarely relevant in common usage, but important to be aware of.
Naming
Several other popular name choices such as self
and global
were removed from consideration because of their potential to break compatibility with existing code. See the language proposal's "naming" document for more details.
Examples
Search for the global across environments
Prior to globalThis
, the only reliable cross-platform way to get the global object for an environment was Function('return this')()
. However, this causes CSP violations in some settings, so es6-shim uses a check like this, for example:
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!
}
With globalThis
available, the additional search for the global across environments is not necessary anymore:
if (typeof globalThis.setTimeout !== 'function') {
// no setTimeout in this environment!
}
Specifications
Specification |
---|
ECMAScript (ECMA-262) The definition of 'globalThis' in that specification. |
Browser compatibility
BCD tables only load in the browser
Implementation progress
The following table provides a daily implementation status for this feature, because this feature has not yet reached cross-browser stability. The data is generated by running the relevant feature tests in Test262, the standard test suite of JavaScript, in the nightly build, or latest release of each browser's JavaScript engine.
See also
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论