开发者

Javascript function to encapsulate check if a variable is undefined?

开发者 https://www.devze.com 2023-03-18 04:56 出处:网络
I\'ve been working on a javascript library, and I have a lot of redundant checks like this: if(typeof foo !== \"undefined\" && foo !== null)

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 nat开发者_JAVA百科ive 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. typeof is 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 a ReferenceError.

(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:

function isset(variable) {
    return variable != null;
}

This function will return false if the variable is either undefined or null. It takes advantage of the fact that undefined == null in 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:

a = 1; // pretend this was set somewhere higher up in the code
var a; // this does not change the value of `a`

If you re-declare variables before you use isset, you could avoid the ReferenceError problem. 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.


You can check for null and undefined at the same time by using != instead.

    // checks for both null and undefined
if( foo != null ) { ...

...so no need to use a function to shorten it.


null and undefined also evaluates to false in an if statement. So the following statement also works:

if(!foo)
    ...

This should cut it down significantly.


I do not understand why people keep promoting if (var) or if (!var). Both fail in my browsers. Meantime if (obj.prop) passes. This means that we should use if (this.someVar) or if (window.someVar) instead of if (varbl). Ok?

0

精彩评论

暂无评论...
验证码 换一张
取 消