Javascript Uncaught TypeError: Cannot read property '0' of undefined
Ich weiß, es gibt viele Fragen im Zusammenhang mit diesem Fehler und ich habe die meisten von Ihnen, und keiner mir helfen, mein Problem. (Das scheint so einfach zu Debuggen...)
Ich habe ein array (das leer ist aat zuerst):
var words = [];
Und meine Funktion hasLetter, prüft, ob wir finden einen Brief (Objekt) im array (die ich hier nennen: d) Worte.
function hasLetter(letter,d){
//if words[0] not null should return object of letter "a", here we getting
//the index of the letter (since ascii of "a" is 97, I substract 97)
var ascii = letter.charCodeAt(0)-97;
//Trying to not get an error with this but still creates an err
if(typeof d[ascii ] !== "undefined" && d[ascii ] !== null && d[ascii ].length > 0){
if(d[ascii].letter == letter){
return true;
}
}
return false; }
und ich haben eine Funktion namens addLetter, das prüft, ob hasLetter gibt true oder false zurück und dann schafft oder nicht, entsprechend einem neuen Knoten.
function addLetter(letter,d){
var ascii = letter.charCodeAt(0)-97;
if(!hasLetter(letter,d)){
document.write("This letter" + letter + " hasn't been found in words.");
d[ascii] = new Node(letter);
}
document.write("This letter " + letter + " already exists in words.");
document.write(d[ascii].letter);
}
und wenn ich test:
addLetter("a",words);
gibt es:
Uncaught TypeError: Cannot read property '0' of undefined
Ich weiß nicht, was zu tun ist, zu sagen "wenn es undefiniert, dann schauen Sie nicht in es oder etwas entlang jenen Linien...
Dank
- Wenn Sie möchten, finden Sie einen Brief in der Reihe, dann die Wörter.indexOf(Buchstabe) > 0) zurückgeben wird, ob der Buchstabe vorhanden ist oder nicht.
- Sie können nicht
hasLetter("a",words[]);
werden solltehasLetter("a",words);
- Nein ist es nicht.
- Welchen browser verwenden Sie?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der Fehler ist hier:
Übergeben Sie das erste Element der
words
, statt dem array.Stattdessen übergeben Sie das array für die Funktion:
Problem gelöst!
Hier ist eine Aufschlüsselung, was das problem war:
Ich vermute, dass in Ihrem browser (chrome, wirft ein anderer Fehler),
words[] == words[0]
, also, wenn Sie rufenhasLetter("a",words[]);
sind Sie eigentlich aufrufenhasLetter("a",words[0]);
. Also, in Wesen, übergeben Sie das erste Element von Worten, um Ihre Funktion nicht das array als ganzes.Natürlich, weil
words
ist nur ein leeres array,words[0]
istundefined
. Daher, Ihrer Funktion anrufen ist eigentlich:was bedeutet, dass, wenn Sie versuchen, Zugriff
d[ascii]
sind Sie tatsächlich versuchen, den Zugangundefined[0]
, daher der Fehler.Ist es kein Fehler, wenn ich Ihren code,
aber ich rufe die
hasLetter
Methode wie diese: