美文网首页web前端技术分享
JavaScript globalThis顶层对象

JavaScript globalThis顶层对象

作者: 仰望天空的人 | 来源:发表于2022-11-14 10:12 被阅读0次

JavaScript 语言存在一个顶层对象,它提供全局环境(即全局作用域),所有代码都是在这个环境中运行。但是,顶层对象在各种实现里面是不统一的。

  • 浏览器里面,顶层对象是window,但 Node 和 Web Worker 没有window
  • 浏览器和 Web Worker 里面,self也指向顶层对象,但是 Node 没有self
  • Node 里面,顶层对象是global,但其他环境都不支持。

同一段代码为了能够在各种环境,都能取到顶层对象,现在一般是使用this关键字,但是有局限性。

  • 全局环境中,this会返回顶层对象。但是,Node.js 模块中this返回的是当前模块,ES6 模块中this返回的是undefined
  • 函数里面的this,如果函数不是作为对象的方法运行,而是单纯作为函数运行,this会指向顶层对象。但是,严格模式下,这时this会返回undefined
  • 不管是严格模式,还是普通模式,new Function('return this')(),总是会返回全局对象。但是,如果浏览器用了 CSP(Content Security Policy,内容安全策略),那么evalnew Function这些方法都可能无法使用。

综上所述,很难找到一种方法,可以在所有情况下,都取到顶层对象。下面是两种勉强可以使用的方法。

// 方法一
(typeof window !== 'undefined'
   ? window
   : (typeof process === 'object' &&
      typeof require === 'function' &&
      typeof global === 'object')
     ? global
     : this);

// 方法二
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');
};

ES2020 在语言标准的层面,引入globalThis作为顶层对象。也就是说,任何环境下,globalThis都是存在的,都可以从它拿到顶层对象,指向全局环境下的this

垫片库global-this模拟了这个提案,可以在所有环境拿到globalThis

相关文章

  • 拿到javascript顶层对象

    现在有一个提案,在语言标准的层面,引入globalThis作为顶层对象。也就是说,任何环境下,globalThis...

  • let 和 const 命令

    let命令,const命令 块级作用域,顶层对象的属性,globalThis对象 let命令式用来声明变量,用法与...

  • let 和 const 命令

    let 命令 块级作用域 const 命令 顶层对象的属性 globalThis 对象 基本用法 ES6 新增了l...

  • 第二章 let 和const命令

    let命令 块级作用域 const命令 顶层对象的属性 globalThis 对象 可抽取出的面试题 es6中一共...

  • [JavaScript基础] BOM

    浏览器对象模型 Browser Object Model Window Javascript层级中的顶层对象,表示...

  • javascript之this的使用

    JavaScript中this在对象中引用的四种形式:代码演示戳这里 1.无任何前缀的函数调用时,this指向顶层...

  • 关于var、let的顶层对象的属性

    顶层对象 ,在浏览器环境指的是 window 对象,在 Node 指的是 global 对象。ES5 之中,顶层对...

  • 顶层对象属性与全局变量

    顶层对象,在浏览器环境指的是window对象,在 Node 指的是global对象。ES5 之中,顶层对象的属性与...

  • (阮一峰)顶层对象的属性

    顶层对象,在浏览器环境指的是window对象,在 Node 指的是global对象。ES5 之中,顶层对象的属性与...

  • js顶层对象的属性

    顶层对象,在浏览器环境指的是window对象,在Node指的是global对象。ES5之中,顶层对象的属性与全局变...

网友评论

    本文标题:JavaScript globalThis顶层对象

    本文链接:https://www.haomeiwen.com/subject/guqntdtx.html