我在控制台中出现了这一行,仅在 Firefox 中,来 self 正在开发的 JavaScript 应用程序:
它似乎相对无害,但我很好奇是否有任何方法可以推断出它的来源,因为它必须来自某个地方,即使它声称“未知”。将整个脚本包装在 try/catch block 中并切换 Firefox 的“异常时暂停”设置不会执行任何操作,这似乎暗示它是一个特殊的异常?我有一些想法哪些我的代码可能导致它使用工作草案 API,但我更感兴趣的是为什么它以这种方式报告以及我可以做些什么。 Firefox 不提供更多细节吗?
最佳答案
有几种方法可以尝试消除此错误。
有一件事非常乏味但会让你得到异常的行号是这样的代码:
foo();
console.log("Line 1");
bar();
console.log("Line 2");
baz();
console.log("Line 3");
等等,如果你在控制台中得到这个:
Line 1
Line 2
Uncaught exception: undefined
那么您就知道是 baz() 导致了错误。另一种方法是使用调试器,如下所示:
debugger;
foo();
bar();
baz();
并且您可以使用 firefox 的调试器遍历每一行并查看哪一行将错误抛出到控制台。
如果你有很多代码,你可以尝试分而治之的技巧,就像这样:
var fooStr = foo();
var fooArr = fooStr.split("");
fooArr = fooArr.reverse();
foo(fooArr.join(""));
console.log("Block one");
var barStr = bar();
var barArr = barStr.split("");
barArr = barArr.reverse();
bar(barArr.join(""));
console.log("Block two");
var bazStr = baz();
var bazArr = bazStr.split("");
bazArr = bazArr.reverse();
baz(bazArr.join(""));
console.log("Block three");
然后,如果控制台看起来像这样:
Block one
Uncaught exception: undefined
那么问题出在第2 block 。那么,你可以这样做:
var barStr = bar();
console.log("Line 1");
var barArr = barStr.split("");
console.log("Line 2");
barArr = barArr.reverse();
console.log("Line 3");
bar(barArr.join(""));
console.log("Line 4");
console.log("Block two");
console.log("Line 5");
如果你看到:
Line 1
Uncaught exception: undefined
那么您就知道 var barArr = barStr.split("");
是您的问题。从那时起,您可能想要记录变量值,如下所示:
console.log(barStr);
var barArr = barStr.split("");
如果您在控制台中看到这个:
undefined
Uncaught exception: undefined
然后您知道 bar()
正在返回 undefined
(而不是字符串),它没有 split
方法。然后你看bar的代码判断是不是,说你忘记了一个参数? Mabey bar
看起来像这样:
function bar(value){
return strings[value];
}
和 strings
是一个包含某些东西的对象。因此,strings[undefined]
将返回 undefined
,它没有 split
方法。错误被压扁了!
关于javascript - 如何在 Firefox 中调试 "uncaught exception: undefined (unknown)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41499109/