このエラーに関連する質問がたくさんあることは知っていますが、それらのほとんどを確認しましたが、私の問題を解決する助けにはなりません。 (デバッグはとても簡単に思えます...)
私は配列を持っています(最初は空です):
var words = [];
そして、私の関数hasLetterは、配列(ここではdと呼ぶ)単語に文字(オブジェクト)が見つかるかどうかをチェックします。
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; }
また、hasLetterがtrue/falseを返すかどうかをチェックし、それに応じて新しいノードを作成するかどうかを確認するaddLetterという関数があります。
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);
}
そして、私がテストする場合:
addLetter("a",words);
それは返します:
Uncaught TypeError: Cannot read property '0' of undefined
「何も定義されていない場合は、その行に沿って何かを調べないでください...」.
ありがとう
エラーは次のとおりです。
hasLetter("a",words[]);
配列ではなく、words
の最初の項目を渡します。
代わりに、配列を関数に渡します。
hasLetter("a",words);
問題が解決しました!
問題の内訳は次のとおりです。
私はあなたのブラウザで推測しています(クロムは別のエラーをスローします)、words[] == words[0]
、したがって、hasLetter("a",words[]);
を呼び出すと、実際にはhasLetter("a",words[0]);
を呼び出しています。したがって、本質的には、単語の最初の項目を関数に渡しますnot全体としての配列。
もちろん、words
は空の配列であるため、words[0]
はundefined
です。したがって、実際の関数呼び出しは次のとおりです。
hasLetter("a", undefined);
つまり、d[ascii]
にアクセスしようとすると、実際にはundefined[0]
にアクセスしようとしているため、エラーになります。
コードを使用してもエラーはありませんが、
しかし、私はhasLetter
メソッドを次のように呼び出しています:
hasLetter("a",words);