Controleer of het object in JavaScript bestaat

Hoe verifieer ik het bestaan ​​van een object in JavaScript?

De volgende werken:

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

Maar deze gooit een foutmelding:

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

de fout:

maybeObjectis niet gedefinieerd.


Antwoord 1, Autoriteit 100%

U kunt de typeofveilig gebruiken op undefined variabelen.

Als het een waarde is toegewezen, inclusief NULL, retourneert Type van iets anders dan undefined. Type van retourneert altijd een touw.

Daarom

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

Antwoord 2, Autoriteit 8%

Er zijn hier veel halve waarheden, dus ik dacht dat ik wat dingen duidelijker maak.

Eigenlijk kun je niet nauwkeurig vertellen of er een variabele bestaat (tenzij je elke tweede regel in een try-palblok wilt wikkelen).

De reden is JavaScript heeft deze beruchte waarde van undefineddie opvallend niet betekent dat de variabele niet is gedefinieerd, of dat het niet bestaat undefined !== not defined

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

Dus beide een variabele die bestaat en een andere die u niet de undefinedtype kan melden.

Wat betreft de misvatting van @Kevin, null == undefined. Het is te wijten aan typedwang, en het is de belangrijkste reden waarom Crockford iedereen die niet zeker is van dit soort dingen blijft vertellen om altijd de strikte gelijkheidsoperator ===te gebruiken om te testen op mogelijk valse waarden. null !== undefinedgeeft je wat je zou verwachten. Houd er ook rekening mee dat foo != nulleen effectieve manier kan zijn om te controleren of een variabele noch undefinednoch nullis. Je kunt natuurlijk expliciet zijn, omdat het de leesbaarheid ten goede komt.

Als u de vraag beperkt om te controleren of een object bestaat, kan typeof o == "object"een goed idee zijn, behalve als u geen arrays-objecten in overweging neemt, omdat dit ook wordt gerapporteerd om het type objectte zijn dat je een beetje in de war kan brengen. Om nog maar te zwijgen van het feit dat typeof nullje ook objectzal geven, wat gewoon verkeerd is.

Het primaire gebied waar je echt voorzichtig moet zijn met typeof, undefined, null, unknownen andere mysteries zijn gastheerobjecten. Ze zijn niet te vertrouwen. Ze zijn vrij om bijna alles te doen wat ze willen. Wees dus voorzichtig met ze, controleer indien mogelijk op functionaliteit, want het is de enige veilige manier om een functie te gebruiken die misschien niet eens bestaat.


Antwoord 3, autoriteit 3%

U kunt gebruiken:

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

Antwoord 4, autoriteit 2%

Twee manieren.

typeof voor lokale variabelen

Je kunt op een lokaal object testen met typeof:

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

venster voor globale variabelen

U kunt testen op een globaal object (een gedefinieerd op het globale bereik) door het vensterobject te inspecteren:

if (window.FormData) {}

Antwoord 5

Als dat een globaal object is, kunt u if (!window.maybeObject)

gebruiken


Antwoord 6

Je zou “typeof” kunnen gebruiken.

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

Antwoord 7

Vroeger deed ik gewoon een if(maybeObject)als nulcontrole in mijn javascripts.

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

Dus alleen als maybeObject– een object is, wordt de waarschuwing weergegeven.
Ik heb een voorbeeld op mijn site.

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


Antwoord 8

De thread is al een tijdje geleden geopend. Ondertussen denk ik dat het gebruik van een ternaire operator de eenvoudigste optie is:

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

Antwoord 9

Ik heb zojuist de typeofvoorbeelden van hierboven getest en geen enkele werkte voor mij, dus in plaats daarvan heb ik dit gebruikt:

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

Antwoord 10

Als je alleen om het bestaan ervan geeft (is het verklaard?), is het goedgekeurde antwoord voldoende:

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

Als je het belangrijk vindt dat het een werkelijke waarde heeft, moet je het volgende toevoegen:

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

As typeof( null ) == "object"

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

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

op deze manier controleer je of het noch nullof undefinedis, en aangezien typeofgeen fout geeft als de waarde niet bestaat plus &&kortsluiting, u krijgt nooit een runtime-fout.

Persoonlijk zou ik willen voorstellen ergens een helper fn toe te voegen (en laten we typeof()niet vertrouwen):

function exists(data){
   data !== null && data !== undefined
}
if( exists( maybeObject ) ){
    alert("Got here!"); 
}

Antwoord 11

Naast het controleren van het bestaan van het object/de variabele, wilt u misschien een “worst case”-uitvoer geven of deze op zijn minst in een waarschuwing opnemen zodat deze niet onopgemerkt blijft.

Voorbeeld van een functie die fouten controleert, alternatieven biedt en fouten opvangt.

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

Ik heb dit ook gemaakt omdat het object dat ik eraan doorgaf x , x.m , x.m[z] zou kunnen zijn en typeof x.m[z] zou mislukken met een fout als x.m niet bestond.

Ik hoop dat het helpt. (BTW, ik ben een beginner met JS)


Antwoord 12

voor mij werkte dit voor een DOM-object:

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

Antwoord 13

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

Antwoord 14

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

Antwoord 15

stel de tekstvakwaarde in op één frame naar inline frame met behulp van het div alignmnt-paneel met tabbladen.
Dus eerst en vooral, voordat we de waarde instellen die we nodig hebben, controleer het geselecteerde frame van de panelen met tabbladen beschikbaar of niet met behulp van de volgende 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>

Antwoord 16

nul en null zijn impliciete aanwijzingen. Als u niet rekenkundig doet, vergelijken of afdrukken ‘0’ op het scherm kunt afdrukken, is het niet nodig om het daadwerkelijk te typen. Het is impliciet. Zoals in impliciet. Type is ook niet vereist om dezelfde reden. Horloge.

if (obj) console.log (“bestaat”);

Ik heb geen verzoek gesteld voor een niet of anders daar voor het is niet inbegrepen als. Zoveel als ik hou van extra inhoud die niet in de vraag past. Laten we het eenvoudig houden.


Antwoord 17

Denk aan het gemakkelijkst als dit

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

Antwoord 18

Of u kunt allemaal mijn exclusieve exists()-methode gaan gebruiken en in staat zijn om dingen te doen die als onmogelijk worden beschouwd. d.w.z.:

Dingen zoals: exists("blabla"), of zelfs: exists("foreignObject.guessedProperty.guessNext.propertyNeeded")zijn ook mogelijk…

Other episodes