各位观众老爷,大家好!我是你们的老朋友,今天咱们不聊风花雪月,来聊聊JavaScript里一个有点意思的小玩意儿——globalThis。 开场白:全局对象大乱斗 话说,在JavaScript的世界里,全局对象一直是个让人头疼的存在。为啥呢?因为在不同的环境里,它长得不一样! 在浏览器里,它是window(或者self,但咱们一般都用window)。 在Node.js里,它是global。 在Web Workers里,它又是self。 这可苦了我们这些程序员了,想写一份通用的代码,就得不停地判断当前环境,然后使用对应的全局对象。 // 以前的写法,各种判断 let globalObject; if (typeof window !== ‘undefined’) { globalObject = window; } else if (typeof global !== ‘undefined’) { globalObject = global; } else if (typeof self !== ‘undefined’){ globalObject = self; } else { // …
JS `globalThis` (ES2020):统一的全局对象访问
各位观众老爷,晚上好!我是你们的老朋友,BUG终结者,今天咱们来聊聊JavaScript里一个神奇的家伙——globalThis。这家伙的出现,简直就像是黑暗森林里的一盏明灯,指引着我们在各种环境下都能找到那个唯一的“老大哥”——全局对象。 一、曾经的痛:全局对象寻觅记 在globalThis出现之前,JavaScript的全局对象简直是个薛定谔的猫,你在不同的环境里打开盒子,看到的可能都不一样: 浏览器里: 稳如老狗的window。self也行,但总感觉不够霸气。 Node.js里: 神秘兮兮的global,有点高冷。 Web Workers里: 委曲求全的self,毕竟寄人篱下。 其他奇奇怪怪的环境: 谁知道呢?反正能跑就行。 这种混乱带来的问题可不小,尤其是当你写一些需要在多个环境运行的通用代码(比如库或者框架)时,你不得不写出这样的代码: // 兼容各种环境的写法,简直是噩梦 var globalObject = (typeof window !== ‘undefined’) ? window : (typeof global !== ‘undefined’) ? global …