• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • globalThis

    这是一个实验中的功能
    此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。

    globalThis可以获取全局对象。

    语法

    globalThis
    

    描述

    事实上,在不同的 JavaScript 环境中拿到全局对象是需要不同的语句的。在 Web 中,可以通过windowself或者frames取到全局对象,但是在 Web Workers 中只有self可以。在 Node.js 中,它们都无法获取,必须使用global。在松散模式下,可以在函数中返回this来获取全局对象,但是在严格模式下this会返回undefined

    globalThis提供了一个标准的方式去获取不同环境下的全局对象。它不像window或者self这些属性,而是确保可以在有无窗口的环境下都可以正常工作。所以你可以安心的使用globalThis,不必担心它的运行环境。

    便于记忆,你只需要记住全局对象自己翻译过来就是globalThis

    命名

    此特性曾经在提案时命名为global,但有些网站会因此运行不正常,所以改名为globalThis了。

    示例

    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!
    }
    

    上篇:null 空