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.
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");
}
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ć.
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
}
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) {}
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)
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");
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
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!");
}
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)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>
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
}
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");
}
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");
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!");
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");
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...
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