判断脚本运行环境(浏览器或 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.document或process.versions.node可以提高判断准确性 - 在严格模式下,顶层
this的值可能不同,需要注意上下文
目录