javascriptdom-eventswindow-object

Why do we write window.?


While adding some initialisation code to a webpage, I found myself writing window.onload = ... for the umptieth time, when a thought hit me.

The window. isn't necessary, because window is the current object. So it's optional!
But nobody writes just onload = ... and I wonder why that is.

I mean, we have no qualms about writing other things, say alert without the window. qualifier.

window.onload = function() {
  alert('Your window has loaded');
};

while in reality, alert is just as much a method of the window object as the onload is.
So, why the difference? Why do even formal websites like the W3C do this?


Solution

  • We write window. when we want to be explicit about it. There are basically two cases when this is good form to use it:

    While we could "optionally" omit the window. part here, it's uncommon. Especially creation of implicitly global variables through assignment is despised, and usually seen as a mistake. So if you do it on purpose, you declare your intention by using window..

    However, the first case is not always well-defined. We often do omit the window. part when the property we want to use is essentially a static, global variable, and not necessarily related to the window object even when it is formally specified on it. You seldom see anybody using document, atob(), Worker, setTimeout() or fetch() with the window. prefix, just as you don't use window.JSON.parse or window.Array for the built-in objects (although it would be valid).

    For some other properties like navigator, location or alert() it is not always clear, and those are used maybe fifty-fifty without or not.