在一个函数中如何区别Node环境和浏览器环境并执行对应代码段?

作者站长头像
站长
· 阅读数 18

由于Node和浏览器环境的不同,内置的许多对象和函数都不一样,同一功能的实现可能需要编写不同的代码片段,那么问题来了,怎么区分Node环境和浏览器环境,我之前想当然以为下面这样写是可以的,然后结果是报错了

// 如何区分Node环境和浏览器环境
function distinguish() {
  if (global) {
    console.log('node环境')
  } else if (window) {
    console.log('window环境')
  } else {
    console.log('其他环境')
  }
}

distinguish()

以下是浏览器执行结果:在一个函数中如何区别Node环境和浏览器环境并执行对应代码段?我知道是由于global未定义导致,有什么办法能够让if里面判断为false而不是报错呢?

回复
1个回答
avatar
test
2024-07-17

javascript 现在可以用标准的 globalThis 来获取全局对象,不需要区分环境了https://developer.mozilla.org...

即使是在低版本浏览器,MDN 也提供了标准的 polyfill

var getGlobal = function () {
  if (typeof self !== 'undefined') { return self; }
  if (typeof window !== 'undefined') { return window; }
  if (typeof global !== 'undefined') { return global; }
  throw new Error('unable to locate global object');
};
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容