开发者问题收集

Javascript 未捕获的类型错误:无法读取未定义的属性‘0’

2015-04-03
152950

我知道有很多问题与此错误有关,并且我检查了其中的大部分,但没有一个能帮助我解决我的问题。 (这似乎很容易调试...)

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

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

我不知道该怎么做才能说“如果它未定义,那么不要调查它或类似的东西...

谢谢

2个回答

错误在这里:

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] ,因此出现错误。

minseong
2015-04-03

当我使用您的代码时没有错误,

但是我正在像这样调用 hasLetter 方法:

hasLetter("a",words);
Akash Chavda
2015-04-03