if (typeof window !== 'undefined')的目的是什么?
What's the purpose of if (typeof window !== 'undefined')
调用
的目的是什么?if (typeof window !== 'undefined')
我在JSPM plugin-css和其他一些库中看到过。
这是一个习惯检查,用于查看脚本是否在web浏览器内的网页中运行。
有人可能会认为JavaScript只能在网页中运行,因为这是它最初设计的目的,但事实并非如此:JavaScript是一种通用语言,也可用于在Node.js或IIS的Active Server Pages(自1996年以来!)中编写服务器端代码,或在"web worker"中编写,这是在后台运行的网页脚本。
在一个网页中,有几个内在对象,如window
,其他环境(如Node.js)不会有window
,但可能有其他对象,如console
(好吧,console
现在存在于大多数浏览器中,但最初不是)。
例如,在不同的上下文中,脚本的全局作用域中有不同的对象可用(此列表并非详尽无遗):
- 在所有JavaScript上下文中,都有一组标准的对象可用,例如:
-
Math
和Date
-
Object
,Number
,Function
,String
等(表示内置类型的对象),等等
-
- 在一个网页的脚本(
<script>
标签内):Window
(接口)暴露为window
全局对象,这也是是全局作用域的对象(因此在全局作用域中声明var foo
实际上创建了一个属性window.foo
!) - 所以
document
全局对象实际上是在访问window.document
属性。
- 由于Node.js不是一个带有DOM的web浏览器,没有
window
全局对象也没有像document
或navigator
这样的属性,而是Node.js通过全局对象暴露其API,如:-
console
-
process
-
exports
-
- 在Web Worker中也没有
window
对象,所以全局作用域是一个WindowOrWorkerGlobalScope
对象,它通过如下属性暴露了浏览器提供的对象:-
caches
-
indexedDB
-
origin
-
response
(用于写入响应流)request
(用于读取传入的HTTP请求)Application
和Session
(用于在请求之间持久化数据)-
WScript
全局对象暴露脚本主机的功能。
这可以用来检测代码是否在一个典型的浏览器环境中运行(例如一个有浏览器DOM的环境)或在其他一些JS环境中运行,因为window
对象存在于一个典型的浏览器JS中,但不存在于node.js甚至浏览器中的webWorker中。
如果window
对象不存在,则
typeof window === 'undefined'
所以你问的代码:
if (typeof window !== 'undefined')
如果window
对象作为顶层变量存在,将执行if
块。
在您链接的特定代码中,如果插件恰好在非浏览器环境中使用,则要避免执行引用DOM对象(如document
)的浏览器目标代码。
相关文章:
- 这是什么 ==- javascript 运算符
- 我的单元测试选项是什么
- 打破承诺链的好方法是什么
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Javascript中的空白是什么
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- 在JavaScript中拆分日期字符串的更好方法是什么
- 将jQuery.ech()方法转换为本地JavaScript抽象的最佳方法是什么
- 处理浮点错误的最佳方法是什么
- javascript导入的最佳实践是什么
- 基于窗口宽度jquery的函数的替代方法是什么
- 访问javascript对象的属性返回undefined,原因是什么
- JavaScript函数中名为“undefined”的参数的目的是什么?
- JavaScript中“(function(window, undefined){})(window)”是什么意思?
- javascript中undefined和null的区别是什么,它们的用例是什么
- undefined在javascript函数原型中指的是什么?
- if (typeof window !== 'undefined')的目的是什么?
- 这是什么语法?;(function ($, undefined)
- 将' undefined '传递给bind()是什么意思?
- 浏览器对Javascript中null/undefined简写检查的支持是什么?