Skip to content

Instantly share code, notes, and snippets.

@davidhund
Created September 5, 2013 15:17
Show Gist options
  • Save davidhund/6451573 to your computer and use it in GitHub Desktop.
Save davidhund/6451573 to your computer and use it in GitHub Desktop.
Trying to figure out the differences (pros/cons) of checking variable existence

Considering the following scenario:

We need to use some var or function schrodinger but do not know if it is available.

So we try:

if(schrodinger){ ... } => ReferenceError: schrodinger is not defined

We could use.. if( typeof(schrodinger) !== "undefined"){ ... } => No error. Stuff does not run

BUT, we could also use.. if( window.schrodinger){ ... }

.. as (apparently) properties become undefined instead of null or something?

This last point I do not understand ("Why does window.schrodinger not throw an error?")

Is there any preference of using typeof(shrodinger).. over window.schrodinger?

@mschot
Copy link

mschot commented Sep 7, 2013

Doh... I meant if(!window.schrodinger) instead of if(window.schrodinger).
What I meant with this is that
if( typeof(schrodinger) !== "undefined"){ ... }
can be replaced by
if( window.schrodinger !== "undefined"){ ... }
but that is of course is not the same as
if(!window.schrodinger){ ... }

Regarding the reference error: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError
States "A ReferenceError is thrown when trying to dereference a variable that has not been declared."

Which as far as I understand ( http://stackoverflow.com/questions/4955198/what-does-dereferencing-a-pointer-mean ) means that it throws and error when the data can not be found in the memory.

When a property of an object is called it does dynamically create a reference from the property (but not the variable) to a memory location and sets that memory location with undefinded.

So after it is (dynamically) created it can find something in the memory at that location and therefore will not throw a referenceError.

@davidhund
Copy link
Author

Thanks Martijn, I'll read up on that info.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment