bendun.cc

self is a cross-platform way to name a window

Written

While scrolling through the Deno 2.0 release notes one thing cought mine eye: deprecation of window. My first suprise was that this even existed - why standalone JavaScript interpreter needs a window? And the second one was: what is globalThis and self?

Naming global context

Browser WebWorker Nodejs Deno Bun
window ✓ ✓
frames ✓
self ✓ ✓ ✓ ✓ ✓
globalThis ✓ ✓ ✓ ✓
global ✓ ✓

There is only one way to access in all JavaScript execution environments the global object: self. Any other way is quirky and works only in some context.

Standards

HTML Spec The window, frames, and self getter steps are to return this's relevant realm.[[GlobalEnv]].[[GlobalThisValue]].
ECMAScript 2020 The initial value of the "globalThis" property of the global object in a Realm Record realm is realm.[[GlobalEnv]].[[GlobalThisValue]].

ECMAScript doesn't have self defined in the standard and the HTML standard doesn't have globalThis defined, relying on reference to ECMA-262 standard. So the only cross platform convention is unofficial one.