判断脚本运行环境(浏览器或 Node)

通过全局对象判断 JavaScript 代码运行在浏览器还是 Node.js 环境

问题

如何判断当前脚本运行在浏览器还是 Node.js 环境中?

解答

基础方法

this === window ? 'browser' : 'node';

这个方法通过判断全局对象是否为 window 来区分环境。在浏览器中,全局对象是 window;在 Node.js 中,全局对象是 global

更可靠的判断方式

// 方法 1:检查 window 对象
const isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';

// 方法 2:检查 process 对象
const isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null;

// 方法 3:综合判断
function getEnvironment() {
  if (typeof window !== 'undefined') return 'browser';
  if (typeof process !== 'undefined') return 'node';
  return 'unknown';
}

关键点

  • 浏览器环境的全局对象是 window,Node.js 环境的全局对象是 global
  • 使用 typeof 检查可以避免引用错误,比直接访问对象更安全
  • 检查 window.documentprocess.versions.node 可以提高判断准确性
  • 在严格模式下,顶层 this 的值可能不同,需要注意上下文