1. ホーム
  2. その他

[解決済み】Javascript Uncaught TypeError: 未定義のプロパティ'0'を読み取れない

2022-01-17 01:51:53

質問

このエラーに関連する質問がたくさんあることは知っていますし、それらのほとんどをチェックしましたが、私の問題を解決するのに役立つものはありませんでした。(デバッグするのは簡単なようですが・・・)。

私は配列を持っています(最初は空です)。

var words = [];

そして、私の関数hasLetterは、配列(ここではdと呼ぶ)wordsの中に文字(オブジェクト)があるかどうかをチェックするものです。

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; }

そして、addLetterという関数があり、hasLetterがtrue/falseを返すかどうかをチェックし、それに応じて新しいノードを作成するかしないかを決めています。

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]); . つまり、要するに、単語の最初の項目を関数に渡しているわけです。 ではなく という配列があります。

もちろん、なぜなら words は単なる空の配列です。 words[0]undefined . したがって、あなたの関数呼び出しは、実際には。

hasLetter("a", undefined);

にアクセスしようとすると d[ascii] にアクセスしようとしているのであって、実際には undefined[0] そのため、エラーが発生します。