LinDaiDai/niubility-coding-js

💪第6期第2题:如何判断当前脚本运行在浏览器还是 node 环境中?

Opened this issue · 0 comments

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

这道题呆呆其实在很多地方都看到了,但是有的回答好像并不那么靠谱。

回答这道题首先我们需要知道一个概念:

浏览器环境:全局对象为window;而在node环境下,是有一个名为global的对象,它的内部Class属性是为"global"

内部Class属性也就是我们通过Object.prototype.call(obj)这种方式来获取到的内容,比如:

console.log(Object.prototype.toString.call([1, 2, 3])); // "[object Array]"

(关于它的用法呆呆在《【精】从206个console.log()完全弄懂数据类型转换的前世今生(上)》中的toString用法时说的也很详细咯)

因此我们可以得出这种判断方式:

var isBrowser = typeof window !== 'undefined'
    && ({}).toString.call(window) === '[object Window]';

var isNode = typeof global !== "undefined"
    && ({}).toString.call(global) == '[object global]';

({}).toString.call()Object.prototype.toString.call()用法一致,只不过在{}的外面最好加上一个(),也是为了预防JS将大括号{}认为是一个空的代码块(额,呆呆试了一下貌似也没有这方面的问题)。