Yarin
Yarin

Reputation: 183499

Check if object exists in JavaScript

How do I verify the existence of an object in JavaScript?

The following works:

if (!null)
   alert("GOT HERE");

But this throws an Error:

if (!maybeObject)
   alert("GOT HERE");

The Error:

maybeObject is not defined.

Upvotes: 370

Views: 813230

Answers (20)

Roy Cascante
Roy Cascante

Reputation: 11

You can use for if not exist any key or obj

 if (Object.keys(obj).length !==0){
      Whatever
 }

This verifies if Obj exist without any key, if you need to verify some existence key if (Object.keys(obj).includes('key'))

Upvotes: 0

Arnaldo Cavalcanti
Arnaldo Cavalcanti

Reputation: 15

You could also try the && operator.

key && value

In this case if the key returns any value that is not:

  • null
  • NaN
  • 0
  • false
  • undefined
  • empty string ("" or '' or ``)

it will return key, else it will return value. In other words if the value is true (exists) it returns key else it returns value.

Upvotes: 0

superluminary
superluminary

Reputation: 49152

Two ways:

typeof for local variables

You can test for a local object using typeof:

if (typeof object !== "undefined") {}

window for global variables

You can test for a global object (one defined on the global scope) by inspecting the window object:

if (window.FormData) {}

Upvotes: 20

Facundo Colombier
Facundo Colombier

Reputation: 3640

I've just tested the typeOf examples from above and none worked for me, so instead I've used this:

    btnAdd = document.getElementById("elementNotLoadedYet");
    if (btnAdd) {
       btnAdd.textContent = "Some text here";
    } else {
      alert("not detected!");
    }

Upvotes: 4

alejandrociatti
alejandrociatti

Reputation: 1132

If you care about its existence only ( has it been declared ? ), the approved answer is enough :

if (typeof maybeObject != "undefined") {
   alert("GOT THERE");
}

If you care about it having an actual value, you should add:

if (typeof maybeObject != "undefined" && maybeObject != null ) {
   alert("GOT THERE");
}

As typeof( null ) == "object"

e.g. bar = { x: 1, y: 2, z: null}

typeof( bar.z ) == "object" 
typeof( bar.not_present ) == "undefined" 

this way you check that it's neither null or undefined, and since typeof does not error if value does not exist plus && short circuits, you will never get a run-time error.

Personally, I'd suggest adding a helper fn somewhere (and let's not trust typeof() ):

function exists(data){
   data !== null && data !== undefined
}

if( exists( maybeObject ) ){
    alert("Got here!"); 
}

Upvotes: 8

Greg Holst
Greg Holst

Reputation: 974

The thread was opened quite some time ago. I think in the meanwhile the usage of a ternary operator is the simplest option:

maybeObject ? console.log(maybeObject.id) : ""

Upvotes: 5

ireadgud
ireadgud

Reputation: 1

zero and null are implicit pointers. If you arn't doing arithmetic, comparing, or printing '0' to screen there is no need to actually type it. Its implicit. As in implied. Typeof is also not required for the same reason. Watch.

if(obj) console.log("exists");

I didn't see request for a not or else there for it is not included as. As much as i love extra content which doesn't fit into the question. Lets keep it simple.

Upvotes: -1

and-bri
and-bri

Reputation: 1664

for me this worked for a DOM-object:

if(document.getElementsById('IDname').length != 0 ){
   alert("object exist");
}

Upvotes: 1

Leo Lanese
Leo Lanese

Reputation: 496

if (n === Object(n)) {
   // code
}

Upvotes: 0

Rub
Rub

Reputation: 2708

Apart from checking the existence of the object/variable you may want to provide a "worst case" output or at least trap it into an alert so it doesn't go unnoticed.

Example of function that checks, provides alternative, and catch errors.

function fillForm(obj) {
  try {
    var output;
    output = (typeof obj !== 'undefined') ? obj : '';
    return (output);
  } 
  catch (err) {
    // If an error was thrown, sent it as an alert
    // to help with debugging any problems
    alert(err.toString());
    // If the obj doesn't exist or it's empty 
    // I want to fill the form with ""
    return ('');
  } // catch End
} // fillForm End

I created this also because the object I was passing to it could be x , x.m , x.m[z] and typeof x.m[z] would fail with an error if x.m did not exist.

I hope it helps. (BTW, I am novice with JS)

Upvotes: 1

noobtoo
noobtoo

Reputation: 11

Think it's easiest like this

if(myobject_or_myvar)
    alert('it exists');
else
   alert("what the hell you'll talking about");

Upvotes: -4

JAL
JAL

Reputation: 21563

You can safely use the typeof operator on undefined variables.

If it has been assigned any value, including null, typeof will return something other than undefined. typeof always returns a string.

Therefore

if (typeof maybeObject != "undefined") {
   alert("GOT THERE");
}

Upvotes: 701

Ram
Ram

Reputation: 1

set Textbox value to one frame to inline frame using div alignmnt tabbed panel. So first of all, before set the value we need check selected tabbed panels frame available or not using following codes:

Javascript Code :

/////////////////////////////////////////
<script>

function set_TextID()
            {
                try
                    {
                        if(!parent.frames["entry"])
                            {
                            alert("Frame object not found");    
                            }
                            else
                            {
                                var setText=document.getElementById("formx").value;
                                parent.frames["entry"].document.getElementById("form_id").value=setText;
                            }
                            if(!parent.frames["education"])
                            {
                            alert("Frame object not found");    

                            }
                            else
                            {
                                var setText=document.getElementById("formx").value;
                                parent.frames["education"].document.getElementById("form_id").value=setText;
                            }
                            if(!parent.frames["contact"])
                            {
                            alert("Frame object not found");    

                            }
                            else
                            {
                                var setText=document.getElementById("formx").value;
                                parent.frames["contact"].document.getElementById("form_id").value=setText;
                            }

                        }catch(exception){}
                }

</script>

Upvotes: -1

gblazex
gblazex

Reputation: 50109

There are a lot of half-truths here, so I thought I make some things clearer.

Actually you can't accurately tell if a variable exists (unless you want to wrap every second line into a try-catch block).

The reason is Javascript has this notorious value of undefined which strikingly doesn't mean that the variable is not defined, or that it doesn't exist undefined !== not defined

var a;
alert(typeof a); // undefined (declared without a value)
alert(typeof b); // undefined (not declared)

So both a variable that exists and another one that doesn't can report you the undefined type.

As for @Kevin's misconception, null == undefined. It is due to type coercion, and it's the main reason why Crockford keeps telling everyone who is unsure of this kind of thing to always use strict equality operator === to test for possibly falsy values. null !== undefined gives you what you might expect. Please also note, that foo != null can be an effective way to check if a variable is neither undefined nor null. Of course you can be explicit, because it may help readability.

If you restrict the question to check if an object exists, typeof o == "object" may be a good idea, except if you don't consider arrays objects, as this will also reported to be the type of object which may leave you a bit confused. Not to mention that typeof null will also give you object which is simply wrong.

The primal area where you really should be careful about typeof, undefined, null, unknown and other misteries are host objects. They can't be trusted. They are free to do almost any dirty thing they want. So be careful with them, check for functionality if you can, because it's the only secure way to use a feature that may not even exist.

Upvotes: 50

plunk2000
plunk2000

Reputation: 1

if (maybeObject !== undefined)
  alert("Got here!");

Upvotes: -2

user513365
user513365

Reputation: 179

I used to just do a if(maybeObject) as the null check in my javascripts.

if(maybeObject){
    alert("GOT HERE");
}

So only if maybeObject - is an object, the alert would be shown. I have an example in my site.

https://sites.google.com/site/javaerrorsandsolutions/home/javascript-dynamic-checkboxes

Upvotes: 5

user1170379
user1170379

Reputation:

Or, you can all start using my exclusive exists() method instead and be able to do things considered impossible. i.e.:

Things like: exists("blabla"), or even: exists("foreignObject.guessedProperty.guessNext.propertyNeeded") are also possible...

Upvotes: -11

RussellUresti
RussellUresti

Reputation: 6221

You could use "typeof".

if(typeof maybeObject != "undefined")
    alert("GOT HERE");

Upvotes: 6

Calvin
Calvin

Reputation: 8765

You can use:

if (typeof objectName == 'object') {
    //do something
}

Upvotes: 19

Nikita Rybak
Nikita Rybak

Reputation: 68006

If that's a global object, you can use if (!window.maybeObject)

Upvotes: 9

Related Questions