TypeError无法读取undefined的属性

时间:2014-05-13 11:43:51

标签: javascript artificial-intelligence

我不知道该怎么标题这个问题所以我只是把它命名为我在控制台中得到的错误。完整的错误是:

  

未捕获的TypeError:无法读取未定义的属性'replaceAt'

这个问题是我可以看到访问replaceAt函数的函数试图做什么,但不知道为什么。我已经做了检查以阻止这种情况发生,但它仍然会发生。

基本上我正在编写一个基于文本的游戏,其中2D地图上的角色和AI战斗(不是阵列地图)。它发生在AI试图离开地图时(只有我注意到的顶部和底部),但我不明白为什么。

我使用的replaceAt函数是:

String.prototype.replaceAt = function(index, char) {
    return this.substr(0, index) + char + this.substr(index+char.length);
}

我正在使用它来轻松编辑数组中的字符串。我也会发布AI功能,但它长447行,不认为它应该在这里发布(如果你认为我会编辑它)。

我的游戏可以在这里找到:http://jsfiddle.net/spedwards/R4F8L/

为什么我在检查停止不可行的操作时会收到TypeError?

2 个答案:

答案 0 :(得分:0)

你的replaceAt函数没问题,你可能用一个字符串来调用它(似乎是undefined值)。 所以在你的代码中调用它之前放一个调试/控制台语句。

或者做这样的事情:

if( typeof myVar === 'string' ){
  myVar.replaceAt(0,'a');
}
else {
  throw new Error('myVar is not a String'); // Or alert, etc. ...
}

答案 1 :(得分:0)

感谢@kapa,我发现了我遇到的问题。使用浏览器的调试工具,我发现我减去了1应该添加它的位置。