The typeof operator returns a string indicating the type of the operand, aka, the entity being type-checked.
console.log(typeof 1);
// => "number"
This is a great way to safely check for the existence of a variable that might not exist. For example, modern JS/TS uses Server-Side Rendering (SSR). That means the window and document don't yet exist. Something like, window.onload = () => ...
would cause a server-side failure, since window
is not yet defined. Wrapping the call in if (window) ...
does not solve the problem because the successful evaluation of the if-clause requires evaluating window
, which is still undefined. This is why typeof
is so useful in this scenario
if (typeof window != 'undefined') ...
One final gotcha, !!(typeof window) == !!'undefined' == true
. That is, 'undefined'
is a string, not an empty, falsey string, a truthy string. You need to explicitly compare again the string 'undefined'
for the guard clause to succeed.