JavaScript: Type Error: 'null' is not an object

maceis

maceis

Aktives Mitglied
Thread Starter
Dabei seit
24.09.2003
Beiträge
16.880
Reaktionspunkte
626
Hallo zusammen,

ich hab ziemlich wenig Ahnung von JavaScript und folgendes Problem:

Ich möchte gerne abfragen, ob das erste Element eines Arrays einen Wert enthält.
Dazu verwende ich folgenden Code.

HTML:
if (matched[0] != 'undefind' ) {
  // tu was
}

Wenn das erste Element leer ist, erhalte ich folgenden Fehler:
Code:
TypeError: 'null' is not an object (evaluating 'matched[0]')

Woran liegt das und wie kann ich das Problem beheben?

Danke und Gruß
maceis
 
Du solltest 'undefined' richtig schreiben und es nicht als String nutzen.

Code:
if (matched[0] !== undefined) {

Dann wird dein Fehler aber wahrscheinlich weiterhin auftreten. Bist du sicher, dass es 'matched' schon gibt?

Lieber sichergehen:

Code:
if (typeof matched !== 'undefined' && matched[0] != null) {

Bei der ersten Bedingung musst du 'undefined' jetzt als String setzen, weil du nur mit der Kombination mit 'typeof' den Fehler umgehen kannst, wenn 'matched' noch nie initialisiert wurde.

Weiterhin ist vielleicht ein "weicher" Vergleich von 'matched[0]' mit '!= null' sinnvoller, weil du damit sowohl 'null' als auch 'undefined' abfängst.
 
Danke.
Mit Euren Vorschlägen bin ich zwar nicht zum Ziel gekommen, aber so scheint es zu gehen:
Code:
if ( matched != undefined && matched[0] != null)
 

Nein, es war schon genau so gemeint wie geschrieben.

1. Wenn matched gar nicht existiert (Was ich ja vermutet hatte), dann wirft alles außer meiner ersten Prüfung einen Fehler, dass 'matched' nicht existiert.
2. Ich habe absichtlich '!= null' gewählt. Damit prüft man (etwas unsauber, aber effektiv) ob der Wert weder 'null' noch 'undefined' ist.
 
Mein Code wahr ja nicht ganz vollständig.
Hier noch einmal einen etwas größeren Ausschnitt (so, wie ich es jetzt habe):

Code:
var uri=window.location.pathname;
var matched = uri.match(/[I]ein_string[/I]/);
if ( matched != undefined && matched[0] != null) {
    //mach was
}

Allerdings scheint mir der Teil '&& matched[0] != null' noch falsch zu sein.

Gruß
maceis
 
Nein, es war schon genau so gemeint wie geschrieben.

1. Wenn matched gar nicht existiert (Was ich ja vermutet hatte), dann wirft alles außer meiner ersten Prüfung einen Fehler, dass 'matched' nicht existiert.
2. Ich habe absichtlich '!= null' gewählt. Damit prüft man (etwas unsauber, aber effektiv) ob der Wert weder 'null' noch 'undefined' ist.

Ähem sorry, im Post #3 fehlt eigentlich mein Geschreibsel. :kopfkratz:

Zu 1. OK. Ich ging davon aus, das das Array mit mehreren Elementen gefüllt sein kann, aber eben [0] gleich null oder undefined ist.

Zu 2. matched[0] != null schlägt aber doch auch an, wenn matched[0] == 0 oder "". Im Gegensatz zu !==.
(Habe ich noch so im Kopf)

@maceis

Kannst du in deinem Beispiel mal echte Werte für matched[0,1] geben?
 
FF/Shift-F4 -> Stimmt. Wo ich das wieder her habe... :kopfkratz:

undefined war's:
Code:
var a = [, "2", "3"];

if(a[0] != null) {
    alert("yes "+a[0]);
} else {
    alert("no "+a[0]);
}

= no undefined

Code:
var a = [, "2", "3"];

if(a[0] !=[COLOR=#ff0000]=[/COLOR] null) {
    alert("yes "+a[0]);
} else {
    alert("no "+a[0]);
}

= yes undefined
 
Zuletzt bearbeitet:
Zurück
Oben Unten