`globalThis`
· 阅读需 2 分钟
如果你之前为网页浏览器编写过 JavaScript,你可能用过 window
来访问全局 this
。在 Node.js 中,你可能使用过 global
。如果你编写的代码需要同时在这两种环境下运行,你可能会检测这些对象哪个可用,然后使用它——但是随着你想支持的环境和用例数量的增加,需要检查的标识符列表会迅速膨胀,事情变得复杂起来:
如果你之前为网页浏览器编写过 JavaScript,你可能用过 window
来访问全局 this
。在 Node.js 中,你可能使用过 global
。如果你编写的代码需要同时在这两种环境下运行,你可能会检测这些对象哪个可用,然后使用它——但是随着你想支持的环境和用例数量的增加,需要检查的标识符列表会迅速膨胀,事情变得复杂起来:
现代的网页应用通常使用包含动态数据的列表。例如,一个照片查看器应用可能会显示如下内容:
此照片包含了 Ada、Edith 和 Grace。
而一个基于文本的游戏可能需要展示不同形式的列表:
选择你的超级能力: 隐身、心灵致动 或 共情。
由于每种语言具有不同的列表格式化惯例和用词,实现一个本地化列表格式化工具是极其复杂的。这不仅需要列出每种语言中所有的单词(如上述例子中的 “和” 或 “或”),还需要在编码时定义这些语言的具体格式化规则。Unicode CLDR 提供了这些数据,但在 JavaScript 中使用这些数据需要事先嵌入,并与其他库代码一起发送。这不幸会增加这些库的打包体积,从而对加载时间、解析/编译成本以及内存消耗产生负面影响。