调用的目的是什么
if (typeof window !== 'undefined')
我在JSPM plugin-css和其他一些库中看到了它。
nx7onnlm1#
这是一个习惯性的检查,以查看脚本是否正在Web浏览器内的网页中运行。有人可能会认为JavaScript只在网页中运行,因为这是它最初设计的目的,但这不是真的:JavaScript是一种通用的语言,也可以用于在Node.js或IIS的Active Server Pages(自1996年以来!)中编写服务器端代码,或者在"web workers"中编写服务器端代码,"web workers"是在后台运行的网页脚本。在一个网页中,有几个内在对象,比如window,其他环境(比如Node.js)不会有window,但是可能有其他对象,比如console(好吧,console现在存在于大多数浏览器中,但它最初并不存在)。例如,在不同的上下文中,脚本的全局作用域中有不同的对象(此列表并不详尽):
window
console
Math
Date
Object
Number
Function
String
<script>
Window
var foo
window.foo
document
window.document
navigator
process
exports
WindowOrWorkerGlobalScope
indexedDB
origin
response
request
Application
Session
WScript
hfsqlsce2#
由于window对象存在于典型的浏览器JS中,但不存在于诸如node.js或甚至浏览器中的webWorker中,因此这可用于检测代码是在典型的浏览器环境(例如,具有浏览器DOM的环境)中还是在某些其他JS环境中运行。如果window对象不存在,则
typeof window === 'undefined'
所以你问的代码:
如果window对象确实作为顶级变量存在,则将执行if块。在您链接的特定代码中,如果插件碰巧在非浏览器环境中使用,它将避免执行引用document等DOM对象的面向浏览器的代码。
if
2条答案
按热度按时间nx7onnlm1#
这是一个习惯性的检查,以查看脚本是否正在Web浏览器内的网页中运行。
有人可能会认为JavaScript只在网页中运行,因为这是它最初设计的目的,但这不是真的:JavaScript是一种通用的语言,也可以用于在Node.js或IIS的Active Server Pages(自1996年以来!)中编写服务器端代码,或者在"web workers"中编写服务器端代码,"web workers"是在后台运行的网页脚本。
在一个网页中,有几个内在对象,比如
window
,其他环境(比如Node.js)不会有window
,但是可能有其他对象,比如console
(好吧,console
现在存在于大多数浏览器中,但它最初并不存在)。例如,在不同的上下文中,脚本的全局作用域中有不同的对象(此列表并不详尽):
Math
和Date
Object
、Number
、Function
、String
等(表示内置类型的对象)等<script>
标记内):Window
(接口)被公开为window
全局对象,它也是 * 是 * 全局作用域的对象(因此在全局作用域中声明var foo
实际上创建了一个属性window.foo
!)document
全局对象实际上访问的是window.document
属性。window
全局对象,也没有document
或navigator
之类的属性,而是Node.js通过如下全局对象公开其API:process
exports
window
对象,因此全局作用域是WindowOrWorkerGlobalScope
对象,它通过如下属性公开浏览器提供的对象:indexedDB
个origin
response
(用于写入响应流)request
(用于从传入的HTTP请求中阅读)Application
和Session
(用于在请求之间保持数据)WScript
全域对象会公开指令码主应用程序的功能。hfsqlsce2#
由于
window
对象存在于典型的浏览器JS中,但不存在于诸如node.js或甚至浏览器中的webWorker中,因此这可用于检测代码是在典型的浏览器环境(例如,具有浏览器DOM的环境)中还是在某些其他JS环境中运行。如果
window
对象不存在,则所以你问的代码:
如果
window
对象确实作为顶级变量存在,则将执行if
块。在您链接的特定代码中,如果插件碰巧在非浏览器环境中使用,它将避免执行引用
document
等DOM对象的面向浏览器的代码。