Javascript Uncaught TypeError: не удается прочитать свойство " 0 " неопределенного

Я знаю, что есть много вопросов, связанных с этой ошибкой и я проверил большинство из них и никто не поможет мне решить мою проблему. (Который кажется таким простым в отладке...)

у меня есть массив (который сначала пуст):

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

и у меня есть функция 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

Я не знаю, что делать, чтобы сказать: "если это неопределенно, то не смотрите на это или что-то в этом роде...

спасибо

3 ответов


ошибка здесь:

hasLetter("a",words[]);

вы передаете первый пункт words вместо массива.

вместо этого передайте массив функции:

hasLetter("a",words);

проблема решена!


вот разбивка того, что проблема была:

я предполагаю, что в вашем браузере (chrome выдает другую ошибку),words[] == words[0], поэтому, когда вы называете hasLetter("a",words[]);, вы на самом деле вызов hasLetter("a",words[0]);. Таким образом, по сути, вы проходите первый элемент слов для вашей функции,не массив в целом.

конечно, потому что words - это просто пустой массив, words[0] и undefined. Поэтому ваш вызов функции на самом деле:

hasLetter("a", undefined);

что означает, что, когда вы пытаетесь получить доступ d[ascii], вы на самом деле пытаетесь получить доступ undefined[0], отсюда и ошибки.


нет ошибки, когда я использую ваш код,

но я называю hasLetter способ такой:

hasLetter("a",words);

Я не думаю, что вам нужно [] в вызове функции. Какой вывод hasLetter("a",words);?