ES11(2020)全局属性 globalThis
Posted 优小U
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES11(2020)全局属性 globalThis相关的知识,希望对你有一定的参考价值。
全局属性 globalThis
包含全局的this
值,类似于全局对象(global object
)。
function canMakeHTTPRequest() {
return typeof globalThis.XMLHttpRequest === 'function';
}
console.log(canMakeHTTPRequest()); // true
在以前,从不同的 javascript 环境中获取全局对象需要不同的语句。在 Web 中,可以通过 window
、self
或者 frames
取到全局对象,但是在 Web Workers
中,只有self
可以。在 Node.js
中,它们都无法获取,必须使用 global
。
在松散模式下,可以在函数中返回 this
来获取全局对象,但是在严格模式和模块环境下,this
会返回 undefined
。
globalThis
提供了一个标准的方式来获取不同环境下的全局 this
对象(也就是全局对象自身)。不像 window
或者 self
这些属性,它确保可以在有无窗口的各种环境下正常工作。所以,你可以安心的使用 globalThis
,不必担心它的运行环境。为便于记忆,你只需要记住,全局作用域中的 this
就是 globalThis
。
以前想要获取全局对象,可通过一个全局函数:
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') {
// 此环境中没有 setTimeout 方法!
}
现在有了 globalThis
之后:
if (typeof globalThis.setTimeout !== 'function') {
// 此环境中没有 setTimeout 方法!
}
以上是关于ES11(2020)全局属性 globalThis的主要内容,如果未能解决你的问题,请参考以下文章
type 'typeof globalThis' 没有索引签名
TypeScript:“Window & typeof globalThis”上不存在属性“X”:使用“declare global”的建议解决方案给了我错误
属性 '_env_' 在类型'Window & typeof globalThis 上不存在 - React / Typescript 错误