Jak zweryfikować istnienie obiektu w JavaScript?
Następujące prace:
if (!null)
alert("GOT HERE");
Ale to powoduje błąd:
if (!maybeObject)
alert("GOT HERE");
Błąd:
maybeObject
nie jest zdefiniowany.
Możesz bezpiecznie używać typeof
operatora na niezdefiniowanych zmiennych.
Jeśli została mu przypisana jakakolwiek wartość, w tym null, typeof zwróci coś innego niż niezdefiniowany. typeof zawsze zwraca ciąg.
W związku z tym
if (typeof maybeObject != "undefined") {
alert("GOT THERE");
}
!==
dla porównania.Jest tu wiele półprawd, więc pomyślałem, że wyjaśnię kilka rzeczy.
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 tę notoryczną wartość,
undefined
która uderzająco nie oznacza, że zmienna nie jest zdefiniowana lub że nie istniejeundefined !== not defined
Tak więc zarówno zmienna, która istnieje, jak i inna, która nie może zgłosić ci
undefined
typu.Co do @ nieporozumieniem Kevina,
null == undefined
. Wynika to z przymusu typu i jest to główny powód, dla którego Crockford mówi każdemu, kto nie jest pewien tego rodzaju rzeczy, aby zawsze używał operatora ścisłej równości===
do testowania możliwych wartości fałszywych.null !== undefined
daje ci to, czego możesz się spodziewać. Pamiętaj również, żefoo != null
może to być skuteczny sposób sprawdzenia, czy zmienna nie jest aniundefined
aninull
. Oczywiście możesz być wyraźny, ponieważ może to poprawić czytelność.Jeśli ograniczysz pytanie, aby sprawdzić, czy obiekt istnieje,
typeof o == "object"
może być dobrym pomysłem, z wyjątkiem sytuacji, gdy nie bierzesz pod uwagę obiektów tablic, ponieważ będzie to również zgłaszać, żeobject
może to być nieco mylące. Nie wspominając o tymtypeof null
, że da ciobject
to, co jest po prostu złe.Pierwotna powierzchnia gdzie naprawdę należy być ostrożnym
typeof
,undefined
,null
,unknown
i inne misteries są obiektami gospodarza. Nie można im ufać. Mogą robić prawie każdą brudną rzecz, jaką chcą. Zachowaj więc ostrożność, jeśli to możliwe, sprawdź funkcjonalność, ponieważ jest to jedyny bezpieczny sposób korzystania z funkcji, która może nawet nie istnieć.źródło
foo!=null
wygeneruje błąd ReferenceError, jeślifoo
nie jest zdefiniowany. Dlatego lepiej jest używaćtypeof
, chyba że planujesz złapać wyjątek.undefined !== not defined
&&foo != null can be an effective way to check if a variable is neither 'undefined' nor 'null'
. Nie powiedziałem, że!= null
jest dobry do sprawdzania, czy istnieje. Zabierasz to z kontekstu. (Wspomniałem również, że jest to sidenotka, niezwiązana ściśle z tematem pytania PO)undefined
. One nie są takie same.(note) it can be used !== you should use
. Podczas czytania należy kierować się zdrowym rozsądkiem. Kiedy zmienna jest zadeklarowana (lista parametrów lub gdzie indziej) i chcesz sprawdzić, czy ma wartość, wartość!=
null jest całkowicie bezpieczna. Jest to inny przypadek użycia niż ten, o który prosił PO, dlatego wtrąciłem go jako notatkę. Cały akapit dotyczy postu @ Kevin i typu przymusu btw. Jak możesz zauważyć, jeśli czytasz uważnie.!= null
gdy wiesz, że zmienna została zadeklarowana. Jest to bardzo przydatne do sprawdzania argumentów funkcji, należy wziąć pod uwagę:var hasValue = function(foo) {return foo != null}
Możesz użyć:
źródło
Dwie drogi.
typeof dla zmiennych lokalnych
Możesz przetestować obiekt lokalny, używając typeof:
okno dla zmiennych globalnych
Możesz przetestować obiekt globalny (zdefiniowany w zasięgu globalnym), sprawdzając obiekt okna:
źródło
Jeśli jest to obiekt globalny, możesz użyć
if (!window.maybeObject)
źródło
window.hasOwnProperty('maybeObject')
jest trochę bardziej czytelny, jeśli jest to obiekt globalnyMożesz użyć „typeof”.
źródło
Wątek został otwarty jakiś czas temu. Myślę, że tymczasem użycie operatora trójskładnikowego jest najprostszą opcją:
źródło
var maybeObject = typeof maybeObject !== "undefined" ? Chart:false;
i sprawdź, jeśli niefalse
.Kiedyś po prostu
if(maybeObject)
sprawdzałem jako zerowy w moich skryptach javascript.Tak więc tylko jeśli
maybeObject
- jest obiektem, alert zostanie wyświetlony. Mam przykład w mojej witrynie.https://sites.google.com/site/javaerrorsandsolutions/home/javascript-dynamic-checkboxes
źródło
maybeObject
jest0, 0.0, or ""
, sprawdza fałszWłaśnie przetestowałem przykłady typeOf z góry i żaden nie działał dla mnie, więc zamiast tego użyłem tego:
źródło
Oprócz sprawdzania istnienia obiektu / zmiennej, możesz chcieć dostarczyć wyjście „najgorszego przypadku” lub przynajmniej uwięzić go w alercie, aby nie został niezauważony.
Przykład funkcji sprawdzającej, zapewniającej alternatywę i wychwytującej błędy.
Stworzyłem to również dlatego, że obiekt, który do niego przekazałem, może być x, xm, xm [z] i typof xm [z] nie powiedzie się z błędem, jeśli xm nie istnieje.
Mam nadzieję, że to pomoże. (BTW, jestem nowicjuszem w JS)
źródło
dla mnie działało to dla obiektu DOM:
źródło
Jeśli zależy ci tylko na jego istnieniu (czy zostało zadeklarowane?), Wystarczy zatwierdzona odpowiedź:
Jeśli zależy ci na tym, aby miała rzeczywistą wartość, dodaj:
Tak jak
typeof( null ) == "object"
na przykład
bar = { x: 1, y: 2, z: null}
W ten sposób można sprawdzić, czy jest to ani
null
czyundefined
, a ponieważtypeof
nie ma błędu, jeśli wartość nie istnieje oraz&&
zwarć, nigdy nie pojawia się błąd w czasie wykonywania.Osobiście sugerowałbym dodanie gdzieś pomocnika fn (i nie ufajmy
typeof()
):źródło
źródło
źródło
ustaw wartość pola tekstowego na jedną ramkę na ramkę wbudowaną za pomocą panelu z kartami div alignmnt. Przede wszystkim więc, zanim ustawimy wartość, musimy sprawdzić, czy wybrana ramka z panelami z kartami jest dostępna lub nie używa następujących kodów:
Kod JavaScript:
źródło
zero i zero są niejawnymi wskaźnikami. Jeśli nie używasz arytmetyki, porównywania ani drukowania „0” na ekranie, nie musisz go wpisywać. To jest dorozumiane. Jak sugerowano. Typeof nie jest również wymagany z tego samego powodu. Zegarek.
if (obj) console.log („istnieje”);
Nie widziałem prośby o nie, bo inaczej nie jest to uwzględnione jako. Uwielbiam dodatkowe treści, które nie pasują do pytania. Niech to będzie proste.
źródło
if (!maybeObject)
- ale rzeczywiście, tytuł prosi o przeciwnej.Pomyśl, że tak jest najłatwiej
źródło
Albo wszyscy możecie zacząć korzystać z mojej wyłącznej metody exist () i móc robić rzeczy uważane za niemożliwe. to znaczy:
Rzeczy takie jak:
exists("blabla")
a nawet:exists("foreignObject.guessedProperty.guessNext.propertyNeeded")
są również możliwe ...źródło