Sprawdzam if(response[0].title !== undefined)
, ale pojawia się błąd:
Uncaught TypeError: Nie można odczytać właściwości „title” niezdefiniowanej.
Sprawdzam if(response[0].title !== undefined)
, ale pojawia się błąd:
Uncaught TypeError: Nie można odczytać właściwości „title” niezdefiniowanej.
Odpowiedzi:
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
}
undefined
nie jest słowem kluczowym JavaScript (chociaż wszyscy myślą, że tak jest). Jeśli chcesz, możesz utworzyć zmienną o nazwie, undefined
a wtedy to sprawdzenie będzie niepoprawne. Jedynym prawidłowym sposobem jest sprawdzenie (typeof myVar !== 'undefined')
.
undefined
?
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){ ... }
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.
undefined
musiałem być sznurkiem.
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');
}
typ:
var foo;
if (typeof foo == "undefined"){
//do stuff
}
Stanie się tak, ponieważ response[0]
sama nie jest zdefiniowana.
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.
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}')
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 typeof
zwraca 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 . typeof
Operator 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 undefined
JavaScript 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 undefined
i 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: