检查当前的JavaScript环境是Node.js还是浏览器
众所周知,JavaScript环境并不相同,可用的API、全局对象甚至语言本身都存在差异。因此,了解当前环境非常重要,以避免错误和意外行为。
检查当前环境是否为Node.js
为了确定当前环境是否为Node.js,我们可以使用process
全局对象,该对象提供有关当前Node.js进程的信息。我们可以检查process
、process.versions
和process.versions.node
是否已定义。
const isNode = () =>
typeof process !== 'undefined' &&
!!process.versions &&
!!process.versions.node;
isNode(); // true (Node)
isNode(); // false (浏览器)
[!NOTE]
由于我对Deno或Bun等运行时不太熟悉,此检查在其他服务器环境中可能也会返回
true
。请确保查阅您使用的运行时的文档,以确定是否是这种情况。
检查当前环境是否为浏览器
另一方面,浏览器环境通常包含window
和document
全局对象。我们可以利用这一事实来确定当前环境是否为浏览器。检查全局对象的存在性的首选方法是使用typeof
运算符,因为它允许我们在不抛出ReferenceError
的情况下检查全局对象的存在性。
```js const isBrowser = () => ![typeof window, typeof document].includes('undefined');
isBrowser(); // true (浏览器) isBrowser(); // false (Node)
[!WARNING]
某些工具或库(例如DOM测试工具)可能会在Node.js中显式定义这些全局变量。在这种情况下,上述检查将返回
true
,即使当前环境是Node.js。