はじめに
前回の記事では、ホスト環境によってglobal objectの名称と挙動が違うことを書きました。
- Node.js:
global
- ブラウザ:
window
(この他にもホスト環境は存在します)
この記事にコメントを頂いたのですが、どうやらglobalThis
という共通の名称が使用できるようです。
名称は同じ。では挙動はどうでしょうか。検証してみます。
ブラウザ:window
前回の記事で確認した、いずれの点もwindow
と同じ挙動でした。
-
const
を使用した変数宣言は、window.name
ではアクセスできない
→globalThis.name
も同様 -
var
を使用した変数宣言は、window.name
でアクセスできる
→globalThis.name
も同様 -
console.log
とwindow.console.log
は完全に等しい
→globalThis.console.log
も同様 - 関数宣言
function
を使用した場合、window.name()
でアクセスできる
→globalThis.name()
も同様 - 関数式の場合は、変数と同じく
const
ではアクセスできず、var
ならアクセスできる
→globalThis
も同様
See the Pen Qiita_global_window by Kohki_Takatama (@Kohki-Takatama) on CodePen.
globalThis === window
がtrue
なので当然ですね。
Node.js:global
console.log(global === globalThis) //true
なので検証の必要はないと思いますが、念の為
var hoge = "hoge"
console.log(globalThis.hoge) //undefined
const fuga = "fuga"
console.log(globalThis.fuga) //undefined
// 先程の続き
globalThis.hoge = hoge
global.fuga = fuga
console.log(global.hoge) // "hoge"
console.log(globalThis.fuga) // "fuga"
global
と全く同じですね。
結論
-
globalThis
は各ホスト環境のglobal objectと等しい - ブラウザの
globalThis
(window
)とNode.jsのglobalThis
(global
)は、同じ名称だけど挙動は違う