it-swarm.com.de

Prüfen Sie, ob ein Objekt in JavaScript vorhanden ist

Wie überprüfe ich die Existenz eines Objekts in JavaScript?

Die folgenden Arbeiten:

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

Aber das wirft einen Fehler:

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

Der Fehler:  

maybeObject ist nicht definiert.

268
Yarin

Sie können den Operator typeof sicher für undefinierte Variablen verwenden.

Wenn ein Wert zugewiesen wurde, einschließlich null, gibt typeof einen anderen Wert als undefined zurück. typeof gibt immer einen String zurück.

Deshalb

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

Es gibt viele Halbwahrheiten hier, also dachte ich, ich mache einige Dinge klarer.

Tatsächlich können Sie nicht genau feststellen, ob eine Variable existiert (es sei denn, Sie möchten jede zweite Zeile in einen Try-Catch-Block umschließen).

Der Grund dafür ist, dass Javascript diesen berüchtigten Wert von undefined hat, was auffallend nicht bedeutet, dass die Variable nicht definiert ist oder nicht existiert. undefined !== not defined

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

Also, sowohl eine Variable, die existiert, als auch eine andere, die den Typ undefined nicht melden kann.

Wie bei @ Kevins Missverständnis null == undefined. Es ist auf den Typ von Zwang zurückzuführen, und es ist der Hauptgrund, warum Crockford jedem, der sich dieser Sache nicht sicher ist, immer den strengen Gleichheitsoperator === zum Testen auf möglicherweise falsche Werte verwendet. null !== undefined gibt Ihnen das, was Sie erwarten könnten. Bitte beachten Sie auch, dass foo != null ein effektiver Weg ist, um zu überprüfen, ob eine Variable weder undefined noch null ist. Natürlich können Sie explizit sein, da dies die Lesbarkeit verbessern kann.

Wenn Sie die Frage einschränken, um zu prüfen, ob ein Objekt vorhanden ist, kann typeof o == "object" eine gute Idee sein, es sei denn, Sie berücksichtigen keine Arrays-Objekte, da dies auch der Typ von object sein wird, der Sie etwas verwirrt machen kann. Ganz zu schweigen davon, dass typeof null Ihnen auch object gibt, was einfach falsch ist.

Der ursprüngliche Bereich, in dem Sie wirklich auf typeof, undefined, null, unknown und andere Misteries achten sollten, sind Host-Objekte. Ihnen kann nicht vertraut werden. Sie können fast alles tun, was sie wollen. Seien Sie also vorsichtig mit ihnen und prüfen Sie, ob dies möglich ist, da dies die einzige sichere Möglichkeit ist, eine Funktion zu verwenden, die möglicherweise gar nicht vorhanden ist.

43
gblazex

Sie können verwenden:

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

Zwei Wege.

typeof für lokale Variablen

Sie können mit typeof für ein lokales Objekt testen:

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

fenster für globale Variablen

Sie können auf ein globales Objekt testen (ein Objekt, das im globalen Gültigkeitsbereich definiert ist), indem Sie das Fensterobjekt untersuchen:

if (window.FormData) {}
7
superluminary

Wenn es sich um ein globales Objekt handelt, können Sie if (!window.maybeObject) verwenden.

5
Nikita Rybak

Sie könnten "typeof" verwenden.

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

Ich habe einfach eine if(maybeObject) als Nullprüfung in meinen Javascripts durchgeführt. 

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

Nur wenn maybeObject - ein Objekt ist, würde die Warnung angezeigt werden . Ich habe ein Beispiel auf meiner Website.

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

4
user513365

Ich habe gerade die typeOf-Beispiele von oben getestet und keines hat für mich funktioniert, daher habe ich stattdessen Folgendes verwendet:

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

2

für mich funktionierte dies für ein DOM-Objekt:

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

Abgesehen von der Überprüfung der Existenz des Objekts/der Variablen möchten Sie möglicherweise eine "Worst-Case" -Ausgabe bereitstellen oder zumindest in eine Warnung einfangen, damit sie nicht unbemerkt bleibt.

Beispiel für eine Funktion, die Fehler prüft, Alternativen bietet und abfängt.

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

Ich habe dies auch erstellt, weil das Objekt, an das ich übergeben wurde, x, x.m, x.m [z] und typeof x.m [z] sein könnte, mit einem Fehler fehlschlägt, wenn x.m nicht vorhanden ist.

Ich hoffe, es hilft. (Übrigens, ich bin Neuling bei JS)

1
Rub

Wenn Sie sich nur um seine Existenz kümmern (wurde es deklariert?), Ist die genehmigte Antwort ausreichend:

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

Wenn Sie daran interessiert sind, einen tatsächlichen Wert zu haben, sollten Sie Folgendes hinzufügen:

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

Als typeof( null ) == "object"

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

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

auf diese Weise stellen Sie sicher, dass es sich nicht um null oder undefined handelt, und da typeof nicht fehlerhaft ist, wenn kein Wert plus && Kurzschlüsse vorliegen, erhalten Sie niemals einen Fehler. Zeitfehler.

Persönlich würde ich vorschlagen, irgendwo einen Helfer fn hinzuzufügen (und lasst uns nicht auf typeof() vertrauen):

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

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

setzen Sie den Wert des Textfelds auf einen Frame mit Hilfe des Registers für div-ausgerichtete Registerkarten .. .. Bevor Sie den Wert festlegen, müssen Sie den ausgewählten Rahmen mit den Registerkarten prüfen, oder folgende Codes nicht verwenden:

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>
0
Ram

Der Thread wurde vor einiger Zeit eröffnet. Ich denke in der Zwischenzeit ist die Verwendung eines ternären Operators die einfachste Option:

maybeObject ? console.log(maybeObject.id) : ""
0
Greg Holst
if (n === Object(n)) {
   // code
}
0
Leo Lanese

Sie können den Operator ! zweimal verwenden !!:

if (!!maybeObject)
  alert("maybeObject exists");

Oder einmal ! für nicht existiert:

if (!maybeObject)
  alert("maybeObject does not exist");

Was ist der !! (nicht) Operator in JavaScript?

0
Rohmer

null und Null sind implizite Zeiger. Wenn Sie nicht rechnen, vergleichen oder '0' auf dem Bildschirm drucken, müssen Sie diese nicht eingeben. Es ist implizit. Wie in angedeutet. Aus dem gleichen Grund ist auch kein Typeof erforderlich. Sehen.

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

Ich habe keine Anfrage für ein nicht gesehen oder sonst da, da es nicht enthalten ist. So sehr ich zusätzlichen Inhalt liebe, der nicht in die Frage passt. Lass es uns einfach halten.

0
ireadgud