Odpowiedzi:
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");
}
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
var a;
alert(typeof a); // undefined (declared without a value)
alert(typeof b); // undefined (not declared)
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ż, że foo != null
może to być skuteczny sposób sprawdzenia, czy zmienna nie jest ani undefined
ani null
. 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ć, że object
może to być nieco mylące. Nie wspominając o tym typeof null
, że da ci object
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ć.
foo!=null
wygeneruje błąd ReferenceError, jeśli foo
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}
Dwie drogi.
Możesz przetestować obiekt lokalny, używając typeof:
if (typeof object !== "undefined") {}
Możesz przetestować obiekt globalny (zdefiniowany w zasięgu globalnym), sprawdzając obiekt okna:
if (window.FormData) {}
Jeśli jest to obiekt globalny, możesz użyć if (!window.maybeObject)
window.hasOwnProperty('maybeObject')
jest trochę bardziej czytelny, jeśli jest to obiekt globalny
Możesz użyć „typeof”.
if(typeof maybeObject != "undefined")
alert("GOT HERE");
Wątek został otwarty jakiś czas temu. Myślę, że tymczasem użycie operatora trójskładnikowego jest najprostszą opcją:
maybeObject ? console.log(maybeObject.id) : ""
var maybeObject = typeof maybeObject !== "undefined" ? Chart:false;
i sprawdź, jeśli nie false
.
Kiedyś po prostu if(maybeObject)
sprawdzałem jako zerowy w moich skryptach javascript.
if(maybeObject){
alert("GOT HERE");
}
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
maybeObject
jest 0, 0.0, or ""
, sprawdza fałsz
Wł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:
btnAdd = document.getElementById("elementNotLoadedYet");
if (btnAdd) {
btnAdd.textContent = "Some text here";
} else {
alert("not detected!");
}
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.
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 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)
Jeśli zależy ci tylko na jego istnieniu (czy zostało zadeklarowane?), Wystarczy zatwierdzona odpowiedź:
if (typeof maybeObject != "undefined") {
alert("GOT THERE");
}
Jeśli zależy ci na tym, aby miała rzeczywistą wartość, dodaj:
if (typeof maybeObject != "undefined" && maybeObject != null ) {
alert("GOT THERE");
}
Tak jak typeof( null ) == "object"
na przykład bar = { x: 1, y: 2, z: null}
typeof( bar.z ) == "object"
typeof( bar.not_present ) == "undefined"
W ten sposób można sprawdzić, czy jest to ani null
czy undefined
, 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()
):
function exists(data){
data !== null && data !== undefined
}
if( exists( maybeObject ) ){
alert("Got here!");
}
if (n === Object(n)) {
// code
}
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:
/////////////////////////////////////////
<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>
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.
if (!maybeObject)
- ale rzeczywiście, tytuł prosi o przeciwnej.
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 ...
!==
dla porównania.