Sprawdź, czy obiekt istnieje w JavaScript

Jak sprawdzić istnienie obiektu w JavaScript?

Następujące dzieła:

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

Ale to rzuca błąd:

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

Błąd:

maybeObject nie jest zdefiniowana.

Author: AustinWBryan, 2010-11-15

16 answers

Możesz bezpiecznie używać operatora typeof na niezdefiniowanych zmiennych.

Jeśli przypisano mu jakąkolwiek wartość, w tym null, typeof zwróci coś innego niż undefined. typeof zawsze zwraca łańcuch znaków.

Dlatego

if (typeof maybeObject != "undefined") {
   alert("GOT THERE");
}
 473
Author: JAL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-31 13:33:26

Jest tu wiele półprawd, więc pomyślałem, że coś wyjaśnię.

W rzeczywistości nie można dokładnie stwierdzić, czy zmienna istnieje (chyba że chcesz zawinąć co drugą linię w blok try-catch).

Powodem jest to, że Javascript ma notoryczną wartość undefined, co nie oznacza, że zmienna nie jest zdefiniowana lub że nie istnieje undefined !== not defined

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

Więc zarówno zmienna, która istnieje, jak i inna, która nie może zgłosić ci undefined Typ.

Co do błędnego przekonania @ Kevina, null == undefined. Wynika to z przymusu typu i jest to główny powód, dla którego Crockford mówi wszystkim, którzy nie są pewni tego typu rzeczy, aby zawsze używali ścisłego operatora równości === do testowania możliwych fałszywych wartości. Daje Ci to, czego możesz się spodziewać. Należy również pamiętać, że foo != null może być skutecznym sposobem sprawdzenia, czy zmienna nie jest ani undefined, ani null. Oczywiście możesz być wyraźny, ponieważ może to pomóc w czytelności.

Jeśli ograniczysz pytanie o sprawdzenie, czy obiekt istnieje, typeof o == "object" może być dobrym pomysłem, chyba że nie rozważasz obiektów tablic, ponieważ będzie to również typ object, który może cię nieco zdezorientować. Nie wspominając o tym, że typeof null da Ci również object, co jest po prostu złe.

Pierwotny obszar, w którym naprawdę należy uważać na typeof, undefined, null, unknown a inne Misteria są obiektami żywicielskimi. Nie można im ufać. Mogą robić prawie każdą brudną rzecz, jaką chcą. Więc bądź uważaj na nich, sprawdź funkcjonalność, jeśli możesz, ponieważ jest to jedyny bezpieczny sposób korzystania z funkcji, która może nawet nie istnieć.

 42
Author: galambalazs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-28 23:30:19

Możesz użyć:

if (typeof objectName == 'object') {
    //do something
}
 10
Author: Calvin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-15 17:07:37

Na dwa sposoby.

Typeof dla zmiennych lokalnych

Możesz przetestować obiekt lokalny używając typeof:

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

Okno zmiennych globalnych

Możesz przetestować globalny obiekt (taki zdefiniowany na globalnym zasięgu), sprawdzając obiekt window:

if (window.FormData) {}
 6
Author: superluminary,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-31 13:18:26

Jeśli jest to obiekt globalny, możesz użyć if (!window.maybeObject)

 5
Author: Nikita Rybak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-15 17:06:06

Możesz użyć "typeof".

if(typeof maybeObject != "undefined")
    alert("GOT HERE");
 4
Author: RussellUresti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-15 17:10:21

Kiedyś robiłem if(maybeObject) jako sprawdzanie null w skryptach javascripts.

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

Więc tylko jeśli maybeObject - jest obiektem, alert zostanie wyświetlony. Mam przykład na mojej stronie.

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

 4
Author: user513365,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-22 14:38:32

Właśnie przetestowałem Typ przykładów z góry i żaden mi nie zadziałał, więc zamiast tego użyłem tego:

    btnAdd = document.getElementById("elementNotLoadedYet");
    if (btnAdd != null) {
       btnAdd.textContent = "Some text here";
    } else {
      alert("not detected!");
    }
 2
Author: Facundo Colombier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-28 18:50:58

Oprócz sprawdzania istnienia obiektu / zmiennej możesz podać wynik "najgorszy przypadek" lub przynajmniej uwięzić go w alercie, aby nie pozostał niezauważony.

Przykład funkcji sprawdzającej, zapewniającej alternatywę i wychwytywającej błędy.

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

Stworzyłem to również dlatego, że obiekt, który do niego przekazywałem, może być x, x. m, x.M [z] i typeof x. m[z] zawiedzie z błędem, jeśli x.M nie istnieje.

Mam nadzieję, że to pomoże. (BTW, jestem nowicjuszem z JS)
 1
Author: Rub,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-05 17:56:31

Ustaw wartość pola tekstowego na jedną ramkę do ramki wbudowanej za pomocą panelu z kartami div alignmnt. Więc przede wszystkim, przed ustawieniem wartości musimy sprawdzić wybrane panele tabbed ramki dostępne lub nie za pomocą następujących kodów:

Kod Javascript:

/////////////////////////////////////////
<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
Author: Ram,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-13 06:39:04
if (n === Object(n)) {
   // code
}
 0
Author: Leo Lanese,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-08 14:36:57

Dla mnie to zadziałało:

if(document.getElementsByClassName("classname").length != 0 ){
   alert("classname exist");
}
 0
Author: and-bri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-14 15:12:54

Możesz użyć operatora ! dwa razy !!:

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

Lub raz ! dla nie istnieje:

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

Co to jest ?! (Nie Nie) operator w JavaScript?

 0
Author: Rohmer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-02 15:39:02
if (maybeObject !== undefined)
  alert("Got here!");
 -1
Author: plunk2000,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-29 16:43:03

Think it ' s easiest like this

if(myobject_or_myvar)
    alert('it exists');
else
   alert("what the hell you'll talking about");
 -5
Author: noobtoo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-19 15:00:04

Lub wszyscy możecie zacząć używać mojej ekskluzywnej metody exists () i być w stanie robić rzeczy uważane za niemożliwe. tj.:

Rzeczy takie jak: exists("blabla"), lub nawet: exists("foreignObject.guessedProperty.guessNext.propertyNeeded") są również możliwe...

 -8
Author: Bill the Lizard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-20 02:45:15