◆ globalThis の名前のままで実装されてた
◆ Chrome (Node.js) と Firefox で使える

ブラウザや Node.js 固有の機能は使わずただの JavaScript の処理をブラウザと Node.js の両方でやりたいことがあります
共通ファイルのライブラリをロードするなど別のファイルのデータを扱いたいのですが 未だに Node.js では ES Modules は実験的サポートです
フラグつけたり特殊なことしないといけないので 一時期 ES Modules 記法にしてましたが なんだかんだ cjs スタイルに戻してます
cjs スタイルだと ブラウザではバンドルしないと対応できません

そんな大きなものでもないので 面倒なことするよりシンプルにグローバルに置いてしまおうということでグローバル変数に参照をもたせようとしていたのですが これもちょっと面倒なんですよね
グローバル変数を参照する名前が 統一されてません

こういうコードを書くことになります

if(typeof window === "object"){
window.value = value
} else if(typeof global === "object") {
global.value = value
}

そろそろ統一したグローバルオブジェクトができてほしいんだけど globalThis とかどうなってんの?
いい名前見つからないから待機中?

と思っていたら普通に動きました
MDN によれば Chrome は 71 からだそうです
3 つも前から使えたんだ

Firefox も 65 からで 1 バージョン前から使えました

名前は globalThis のままです
もうちょっと短いのが良かったですけど 頻繁に書くべきでもないし別にいいかな


globalThis の機能は単純にグローバルオブジェクトを参照する共通の変数名というだけです
下のように書けばどの環境の JavaScript でもグローバル変数に value を追加できます

globalThis.value = value

これで Node.js とブラウザ JavaScript で場合分けする必要も減りました
あとは ES Modules が Node.js で stable になってくれるのを待つだけです


そういえば MongoDB とか JScript とか V8 出る前に使われてた JVM で動く JavaScript とかのグローバルオブジェクトを参照する変数名ってなんだっけ