Sprawdź, czy coś nie jest niezdefiniowane w JavaScript


Odpowiedzi:


345

response[0] nie jest zdefiniowany, sprawdź, czy jest zdefiniowany, a następnie sprawdź jego tytuł właściwości.

if(typeof response[0] !== 'undefined' && typeof response[0].title !== 'undefined'){
    //Do something
}

20
Mimo liczby głosów nie jest to dobry sposób na sprawdzenie, ponieważ undefinednie jest słowem kluczowym JavaScript (chociaż wszyscy myślą, że tak jest). Jeśli chcesz, możesz utworzyć zmienną o nazwie, undefineda wtedy to sprawdzenie będzie niepoprawne. Jedynym prawidłowym sposobem jest sprawdzenie (typeof myVar !== 'undefined').
BadHorsie,

4
@BadHorsie ma sens, zaktualizowałem odpowiedź z twoim komentarzem.
amosrivera

1
Co jeśli zmienna istnieje i zawiera ciąg o treści „niezdefiniowany”?
TomeeNS,

@BadHorsie Twój argument jest fałszywy. Dlaczego powinienem przedefiniować undefined?
Robert Siemer

@amosrivera Nie, jego komentarz nie miał sensu. Pogarszałeś swoją odpowiedź.
Robert Siemer

39

Po prostu sprawdź, czy response[0]jest niezdefiniowany:

if(response[0] !== undefined) { ... }

Jeśli nadal musisz wyraźnie sprawdzić tytuł, zrób to po wstępnym sprawdzeniu:

if(response[0] !== undefined && response[0].title !== undefined){ ... }

35

Miałem problem ze wszystkimi innymi przykładami kodu powyżej. W Chrome taki warunek działał dla mnie:

typeof possiblyUndefinedVariable !== "undefined"

Będę musiał to przetestować w innych przeglądarkach i zobaczyć, jak się sprawy potoczyły.


2
To samo - znalazłem undefinedmusiałem być sznurkiem.
remarsh

to musi być coś nowego z chrome (jestem na win chrome 41 atm). przyjęta odpowiedź działała dobrze! : P
Joe,

13

W rzeczywistości musisz go otoczyć blokiem Try / Catch, aby Twój kod nie przestał działać. Lubię to:

try{
    if(typeof response[0].title !== 'undefined') {
        doSomething();
    }
  }catch(e){
    console.log('responde[0].title is undefined'); 
  }

Patrzyłem na IE 8 i musiałem spróbować złapać.
RonanOD

1
jest to najlepszy sposób, jeśli
testujesz,

Zgłoszenie błędu w celu sprawdzenia niezdefiniowanego nie jest dobrym rozwiązaniem. @amosrivera jest najlepszym rozwiązaniem.
user3658423,

@ user3658423: To nie jest zgłaszanie błędu. Zapobiega to zatrzymaniu skryptu tylko w przypadku niezadeklarowania odpowiedzi (ponieważ spowodowałoby to błąd).
André Luiz

Czasami błędy mogą być pomocne. W proponowanym rozwiązaniu, jeśli doSomething () zgłosi wyjątek, wszystko, co zobaczysz w konsoli, to „odpowiedz [0] .title jest niezdefiniowany”, zamiast użytecznego komunikatu o „niezrejestrowanym wyjątku @ linia 123 pliku xyz .js ”. W końcu drugi programista prawdopodobnie skomentuje instrukcję console.log (), co utrudni wejście trzeciego programisty i naprawienie błędu występującego głęboko w doSomething ().
Eric Seastrand,




0

Sprawdź, czy response[0]naprawdę istniejesz, wydaje się, że błąd sugeruje, że tak nie jest.


0

Najpierw musisz sprawdzić, czy response[0]jest niezdefiniowany i tylko jeśli nie jest, sprawdź resztę. Oznacza to, że w twoim przypadku nie response[0]jest zdefiniowany.


0

Wiem, że spóźniłem się 7 miesięcy, ale znalazłem te pytania i wygląda to interesująco. Próbowałem tego na konsoli przeglądarki.

try{x,true}catch(e){false}

Jeśli zmienna x nie jest zdefiniowana, błąd jest wychwytywany i będzie fałszywy, jeśli nie, zwróci true. Możesz więc użyć funkcji eval, aby ustawić wartość na zmienną

var isxdefined = eval('try{x,true}catch(e){false}')

1
Ciekawe podejście, jeśli sam bym tak powiedział.
Brandito

0

W niektórych z tych odpowiedzi istnieje podstawowe nieporozumienie dotyczące sposobu korzystania typeof.

Błędny

if (typeof myVar === undefined) {

Poprawny

if (typeof myVar === 'undefined') {

Powodem jest to, że typeofzwraca ciąg. Dlatego powinieneś sprawdzić, czy zwrócił ciąg „niezdefiniowany” zamiast undefined(nie ujęty w cudzysłów), który sam jest jednym z podstawowych typów JavaScript . typeofOperator nigdy nie zwróci wartość typu undefined.


Uzupełnienie

Twój kod może technicznie działać, jeśli użyjesz niepoprawnego porównania, ale prawdopodobnie nie z tego powodu. W undefinedJavaScript nie ma żadnej istniejącej zmiennej - to nie jest jakieś magiczne słowo kluczowe, z którym można porównać różne rzeczy. Możesz utworzyć zmienną o nazwie undefinedi nadać jej dowolną wartość.

let undefined = 42;

A oto przykład, w jaki sposób możesz to wykorzystać, aby udowodnić, że pierwsza metoda jest niepoprawna:

https://jsfiddle.net/p6zha5dm/

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.