[JS] Istnienie objektu

0

W jaki sposób można sprawdzić czy dana zmienna jest zainicjowanym objektem czy też nie?

Próbowałem

if(!zmienna){...}
if(zmienna!=undefined){...}
if(zmienna!='undefined'){...}
if(zmienna!=null){...}

Powyższe instrukcje skutkują tylko błędami w konsoli...

0
if (typeof zmienna != "undefined" && zmienna !== null) { .. }
0

if(!zmienna){...}

Takie coś nie powinno sypać błędem i jest wystarczającym warunkiem . .ale - tylko jeżeli jesteś pewien typu "zmienna" (dla obiektu - OK). Jeśli miałby to być np. Number - wtedy !zmienna=true dla wartości 0. Trzeba uważać.

Jestem przekonany, że twoje pozostałe warunki również nie powinny wyrzucać błędu - pokaż więcej kodu.

0

@Deti:
Wyrzucają błąd i powinny to robić, gdy zmienna jest symbolem niezdefiniowanym. Dotyczy to tylko symboli globalnych, gdy odnosimy się do nich właśnie w taki, prosty sposób.

Można by napisać if (window.zmienna) i byłoby OK nawet jeśli zmienna nigdzie nie została zadeklarowana. Ale samo if (zmienna) już sypie błędem. Po prostu możemy tak testować wyłącznie własności obiektu, czyli można napisać wyrażenie obiekt.pole nawet gdy pole w danym obiekcie nie zostało zdefiniowane.

Abstrahuję już od tego, że trzeci rodzaj porównania (zmienna != 'undefined') jest kompletnie bez sensu, czwarty jest mylący (czemu null skoro chodzi nam w zasadzie o undefined?), a w drugim i w sumie to każdym powinien zostać użyty operator !==, a nie !=.

Aha: gdy testujemy zmienną warunkiem if (zmienna), a zmienna została zadeklarowana, ALE nie zainicjalizowana i ma wartość undefined, to błędu nie ma. Czyli można napisać:

function f(arg) {
  if (arg) {
    ...
  }
}

f(); // nie przekazujemy nic, arg przyjmuje wartość undefined

I wywołanie z ostatniej linijki nie spowoduje błędu. Bo symbol arg jest zadeklarowany.

1 użytkowników online, w tym zalogowanych: 0, gości: 1