Skip to content

检查当前的JavaScript环境是Node.js还是浏览器

众所周知,JavaScript环境并不相同,可用的API、全局对象甚至语言本身都存在差异。因此,了解当前环境非常重要,以避免错误和意外行为。

检查当前环境是否为Node.js

为了确定当前环境是否为Node.js,我们可以使用process全局对象,该对象提供有关当前Node.js进程的信息。我们可以检查processprocess.versionsprocess.versions.node是否已定义。

const isNode = () =>
  typeof process !== 'undefined' &&
  !!process.versions &&
  !!process.versions.node;

isNode(); // true (Node)
isNode(); // false (浏览器)

[!NOTE]

由于我对Deno或Bun等运行时不太熟悉,此检查在其他服务器环境中可能也会返回true。请确保查阅您使用的运行时的文档,以确定是否是这种情况。

检查当前环境是否为浏览器

另一方面,浏览器环境通常包含windowdocument全局对象。我们可以利用这一事实来确定当前环境是否为浏览器。检查全局对象的存在性的首选方法是使用typeof运算符,因为它允许我们在不抛出ReferenceError的情况下检查全局对象的存在性。

```js const isBrowser = () => ![typeof window, typeof document].includes('undefined');

isBrowser(); // true (浏览器) isBrowser(); // false (Node)

[!WARNING]

某些工具或库(例如DOM测试工具)可能会在Node.js中显式定义这些全局变量。在这种情况下,上述检查将返回true,即使当前环境是Node.js。