I’ve been working on a javascript library, and I have a lot of redundant checks like this:
if(typeof foo !== "undefined" && foo !== null)
So, I wanted to create a function that will be a shortcut to this unwieldy check. So I came up with this:
function isset(a)
{
return (typeof a !== "undefined" && a !== null) ? true : false;
}
But, since the value could be undefined, and it attempts to use a possibly undefined variable, it turns out to be useless.
Is there a way to accomplish this without have to extend a native prototype?
It really depends on what you mean by
undefined.1. You mean the variable does not exist.
In this case, what you want is not possible.
typeofis an operator and therefore has magic behavior you just can’t emulate using the language. If you try to pass a variable that doesn’t exist to your function, it will throw aReferenceError.(See below for a workaround.)
2. You mean the variable has the value
undefined, but does exist.In this case, your function will do the trick — though it could be simplified to the following:
This function will return
falseif the variable is eitherundefinedornull. It takes advantage of the fact thatundefined == nullin JavaScript. Of course, with such a short function, one could argue that the function isn’t needed at all.Recall that a variable that is declared has a value —
undefined— by default.The name of your function suggests you mean case #1. I don’t know what sort of library you are writing, but I can’t imagine a case in a library where you would need to check if a variable exists, though I can definitely think of many possibilities for case #2.
If case #1 is necessary, remember that you can re-declare variables without changing their value:
If you re-declare variables before you use
isset, you could avoid theReferenceErrorproblem. You won’t be able to tell if the code has already declared the variable, though; you will only be able to tell if they have not assigned it to some other value.