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 中,可以通过 windowself或者 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的主要内容,如果未能解决你的问题,请参考以下文章

ES11中的globalThis和可选链

type 'typeof globalThis' 没有索引签名

TypeScript:“Window & typeof globalThis”上不存在属性“X”:使用“declare global”的建议解决方案给了我错误

ES6 简介

属性 '_env_' 在类型'Window & typeof globalThis 上不存在 - React / Typescript 错误

ES6