初学者使用 JavaScript 进行调试:我的处理方式。

2025-06-07

初学者使用 JavaScript 进行调试:我的处理方式。

📝 注意:使用 Chrome,尽管大多数浏览器都非常相似,所以您可以使用本文并根据您喜欢的浏览器进行稍微调整。

🤓 网上有很多关于如何使用 Chrome 调试 JavaScript 的深入文章,也有很多主观性很强的文章告诉你调试时不该做什么。这篇文章不是那样的。相反,它只是我研究问题时的一些早期步骤的快速概述。

我希望它能成为更深入的文章的一个很好的辅助,让你更好地感受 JS 调试的“流程”,就像一个普通人试图弄清楚到底发生了什么事情一样 🙂

场景:点击按钮没有得到预期结果

我期望点击页面上的按钮时会收到 JavaScript 警告。但是点击按钮后什么也没发生 🙁 我该先尝试什么?

首先要做的简单事情:检查控制台中的错误

有时候,只需这样就够了。我打开开发者控制台(在 Mac 上,Chrome 浏览器:cmd-option-j。Safari 浏览器:cmd-option-c。Firefox 浏览器:cmd-option-k。有人漏掉了关于保持快捷键一致性的备忘录🤪。)

我查看单击按钮时是否会弹出任何 JS 错误。

aler 未定义屏幕截图

嗯,aler is not defined呃?哎呀!我好像拼错alert了。很容易改正!

尝试打开“捕获异常时暂停”

如果发生错误但控制台中未显示,可能是因为错误发生在 try-catch 块中(或带有catch未正确处理异常的 Promise 中)。建议您前往sources“发生异常时暂停”选项卡,并勾选“捕获到异常时暂停”复选框。然后尝试再次点击按钮。

开启异常暂停屏幕截图

被拒绝的承诺截图

因此,在这种情况下,承诺被拒绝,但警报仅在承诺解决后才会发生(promise.then下面几行)

不幸的是,这个承诺被一个非常现实的 😳 拒绝了reject(‘foo’),所以警报永远不会发生。好的,我可以解决这个问题!把它变成rejectresolve我们就没问题了(注意:现实生活中可能没那么简单 😛)

此源选项卡还有另一个用途:有时控制台中的错误即使显示出来也可能无法提供足够的信息。

也许错误表明变量未定义,但您无法弄清楚为什么。

在这种情况下,您可以打开“发生异常时暂停”,但无需打开“捕获异常时暂停”选项,因为您能看到错误,只是还不能完全理解错误。

未定义methodToUse截图

哎呀,看来我不小心methodToUse在事件监听器的作用域内覆盖了全局变量,所以它在这里没有定义。我可以通过查看右侧的“作用域”部分来发现这个问题,该部分显示了该方法作用域内所有可用的变量及其含义。在左侧,我可以看到实际的代码,幸运的是,将变量设置为 undefined 的那一行代码非常醒目,所以很容易找到并修复。

但有时根本没有错误,而且到目前为止这些都没有任何帮助!

这里有几个选项。我最喜欢的方法是识别按钮点击的每个移动部分,并console.log在每个部分添加一个,看看在某个部分不被调用之前我们进展到了什么程度。这有助于我缩小故障点的范围。

我的 console.log 设置示例:
console.logs 的屏幕截图

当我单击按钮时,我在控制台中看到的内容:
控制台输出截图

嗯,好吧,前两个方法被调用了,但最后一个方法没有被调用。为什么呢?

如果仅通过查看代码我无法弄清楚,我可能会抛出一个debugger并再试一次。

代码中的调试器行

一旦debugger命中该行,一切都会“暂停”,我可以转到控制台并在函数的当前范围内进行操作,这样我就可以轻松访问所有相同的变量和函数。

也许我会尝试showAlert从控制台调用自己并看看它返回什么。
调用 showAlert 的屏幕截图

哦哦哦,它返回的是一个函数,却没有立即调用 alert。我真是个笨蛋。我应该这样调用它:

showAlert()()这听起来很荒谬,但这只是我一个奇怪的假例子。大家冷静一下。我们来试试吧:

调用 showAlert()() 的屏幕截图

…🎉 成功了!!

感谢阅读

这篇短文有一些荒谬的错误,但希望对于那些已经阅读过 JS 调试工具文献但还不擅长实际使用它们的人来说,这篇文章能让你了解如何/何时尝试。

推荐阅读更深入的文档

这篇文章并没有完整概述从浏览器到调试的所有操作,所以如果你真的想深入了解一些可用的资源,请查看这些文章 🙂

如果你知道 dev.to 上其他关于 JS 调试的好文章,请在评论区分享!💖

文章来源:https://dev.to/rose/debugging-in-javascript-for-beginners-how-i-approach-things-490j
PREV
以 30 分钟为增量播放 CSS 动画
NEXT
CSS 变量、input[type="color"] 和表单动画