Javascript Uncaught TypeError:无法读取未定义的属性"0"

Gre*_*ron 11 javascript arrays error-handling typeerror

我知道有很多与此错误有关的问题,我已经检查了大部分问题,没有人帮我解决我的问题.(这似乎很容易调试......)

我有一个数组(首先是空的):

var words = [];
Run Code Online (Sandbox Code Playgroud)

我的函数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; }
Run Code Online (Sandbox Code Playgroud)

我有一个名为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);
Run Code Online (Sandbox Code Playgroud)

}

如果我测试:

addLetter("a",words);
Run Code Online (Sandbox Code Playgroud)

它返回:

Uncaught TypeError: Cannot read property '0' of undefined
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么说"如果它是未定义的,那么不要研究它或那些沿线的东西......

谢谢

the*_*sti 14

错误在这里:

hasLetter("a",words[]);
Run Code Online (Sandbox Code Playgroud)

您传递的是第一项words,而不是数组.

相反,将数组传递给函数:

hasLetter("a",words);
Run Code Online (Sandbox Code Playgroud)

问题解决了!


以下是问题所在的细分:

我猜你的浏览器(chrome会抛出一个不同的错误)words[] == words[0],所以当你打电话时hasLetter("a",words[]);,你实际上正在打电话hasLetter("a",words[0]);.所以,从本质上讲,你将第一个单词传递给你的函数,而不是整个数组.

当然,因为words只是一个空数组,words[0]undefined.因此,您的函数调用实际上是:

hasLetter("a", undefined);
Run Code Online (Sandbox Code Playgroud)

这意味着,当您尝试访问时d[ascii],您实际上是在尝试访问undefined[0],因此错误.