javascript if的用途是什么(typeof window!== '未定义')

zfycwa2u  于 2022-12-10  发布在  Java
关注(0)|答案(2)|浏览(143)

调用的目的是什么

if (typeof window !== 'undefined')

我在JSPM plugin-css和其他一些库中看到了它。

nx7onnlm

nx7onnlm1#

这是一个习惯性的检查,以查看脚本是否正在Web浏览器内的网页中运行。
有人可能会认为JavaScript只在网页中运行,因为这是它最初设计的目的,但这不是真的:JavaScript是一种通用的语言,也可以用于在Node.js或IIS的Active Server Pages(自1996年以来!)中编写服务器端代码,或者在"web workers"中编写服务器端代码,"web workers"是在后台运行的网页脚本。
在一个网页中,有几个内在对象,比如window,其他环境(比如Node.js)不会有window,但是可能有其他对象,比如console(好吧,console现在存在于大多数浏览器中,但它最初并不存在)。
例如,在不同的上下文中,脚本的全局作用域中有不同的对象(此列表并不详尽):

  • 在所有JavaScript上下文中,都可以使用一组标准对象,例如:
  • MathDate
  • ObjectNumberFunctionString等(表示内置类型的对象)等
  • In a web-page's script(在<script>标记内):
  • Window(接口)被公开为window全局对象,它也是 * 是 * 全局作用域的对象(因此在全局作用域中声明var foo实际上创建了一个属性window.foo!)
  • 因此,document全局对象实际上访问的是window.document属性。
  • 在Node.js服务器端脚本中:
  • 由于Node.js不是一个带有DOM的Web浏览器,因此没有window全局对象,也没有documentnavigator之类的属性,而是Node.js通过如下全局对象公开其API:
  • x1米20英寸
  • process
  • exports
  • In a web-page's Web Worker script
  • 在Web Worker中也没有window对象,因此全局作用域是WindowOrWorkerGlobalScope对象,它通过如下属性公开浏览器提供的对象:
  • x1米25英寸
  • indexedDB
  • origin
  • 在使用JScript(而不是VBScript)的IIS活动服务器页中:
  • response(用于写入响应流)
  • request(用于从传入的HTTP请求中阅读)
  • ApplicationSession(用于在请求之间保持数据)
  • 在Microsoft Windows的Shell脚本宿主中
  • WScript全域对象会公开指令码主应用程序的功能。
hfsqlsce

hfsqlsce2#

由于window对象存在于典型的浏览器JS中,但不存在于诸如node.js或甚至浏览器中的webWorker中,因此这可用于检测代码是在典型的浏览器环境(例如,具有浏览器DOM的环境)中还是在某些其他JS环境中运行。
如果window对象不存在,则

typeof window === 'undefined'

所以你问的代码:

if (typeof window !== 'undefined')

如果window对象确实作为顶级变量存在,则将执行if块。
在您链接的特定代码中,如果插件碰巧在非浏览器环境中使用,它将避免执行引用document等DOM对象的面向浏览器的代码。

相关问题