8

我知道有很多与此错误有关的问题,我已经检查了其中的大多数,没有人帮我解决了我的问题。 (这似乎很容易调试...)Javascript未捕获TypeError:无法读取属性'0'的undefined

我有一个数组(里面是空的AAT在前):

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 

我不知道该怎么办说“如果它是不确定的,然后不要不要看着它或沿着这些线......

感谢

+0

如果你想在数组中找到一个字母,那么(words.indexOf(letter)> 0)会返回你是否存在该字母。 – mohamedrias 2015-04-03 11:28:21

+0

你不能做'hasLetter(“a”,单词[]);',应该是'hasLetter(“a”,words);' – theonlygusti 2015-04-03 11:28:29

+0

@mohamedrias不会。 – theonlygusti 2015-04-03 11:28:46

回答

9

的错误是在这里:

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

+0

是的,我没有通过添加“[]”我的呼叫hasLetter失败,但我的错误实际上来自另一个函数(它来自这一个,但调用另一个)。我会创建一个新的线程(或者我应该更新这个?),但感谢解释这个,它帮助:) – 2015-04-03 13:25:58

+0

好吧,是的,这是有道理的;我对你遇到的错误感到困惑,我预料它会更多地沿着“意想不到的”方向发展。“不管怎样,谢谢!如果你给这个答案投票,我会有2k的复制! – theonlygusti 2015-04-03 14:09:04

2

有,当我用你的代码没有错误,

但我调用hasLetter方法是这样的:

hasLetter("a",words); 
0

我不认为你需要在你的函数调用中使用[]hasLetter("a",words);的输出是什么?

相关问题