作者:Ashish Lahoti 译者:前端很美 来源:codingnconcepts

在这个教程中,我们将学到很多使用chrome控制台调试js的技巧,例如打日志的多种不同的console api 等等。。。

1.尽量不要使用alert调试

alert("I will pop up in browser");
image.png

当我们使用alert调试时,他会烦人的在浏览器中弹出,并且阻塞进程,尽量避免使用alert,因为有很多替代的调试方法,随后我们将会看到。

2.使用浏览器作为调试器

大多数现代浏览器,例如 Chrome、Firefox、Edge、Opera 和 Safari,都内置了对 JavaScript 调试的支持。Chrome 作为调试器通常是开发人员的首选。

Chrome 开发者工具
image.png

Chrome DevTools 中一些最常用的图标是:

  1. 使用Inspect 图标 选择页面中的元素并在Elements 标签中检查其 DOM 位置。也可以更新或删除 DOM 元素,检查DOM元素的CSS,以及其他更多的操作。
  2. 使用设备图标 检查网站的响应能力。它在浏览器页面上添加了一个额外的工具栏,可以在其中模拟不同设备的视口,例如手机 (如 iPhone、三星 Galaxy、Nexus、LG、诺基亚、黑莓等) 、平板电脑 (如 iPad 等) 和笔记本电脑 。
  3. 可以在Sources选项卡下查看呈现页面的所有 JavaScript 源代码。通常源文件被压缩,无论是阅读还是打断点都很难。使用格式图标 {}以人类可读的格式格式化这些被压缩的js文件。

3.代码断点

我们可以使用断点在浏览器中暂停JavaScript代码的执行。在 DevTools 中设置代码行断点:

  1. 单击source选项卡。
  2. 打开js文件并转到你要调试的代码行。
  3. 在代码的左侧可以看到行数列。点击行号,旁边会出现一个图标,表示断点已设置好了。
  4. 如果要删除断点,再次单击相同的行号,断点图标消失。

请注意的是,DevTool 中的断点图标可能会因 chrome 版本和操作系统(windows 或 MacOS)而不同

有的时候,设置代码行断点可能效率低下,尤其是当我们不知道确切的位置时,或者调试大型代码库时。了解并知道如何使用其他类型的断点将会提高调试的效率。

断点类型 当您想暂停时使用它...
代码行 在确切的代码行上。
有条件的代码行 在仅当一些条件为真时的确切的代码行上
DOM 在更改或删除特定 DOM 节点或其子节点的代码上。
XHR 在XHRsend()fetch()方法
事件监听器 在触发事件(例如click )之后运行的代码上。
异常 在抛出异常的代码行上。
函数 调用函数时。

4.使用‘debugger’语句设置断点

当浏览器处于调试模式,代码运行到debugger语句时,将会像像断点一样暂停代码的执行。
通常,我们会在浏览器devtools工具中找到有问题的代码并设置断点进行调试,但是有时在浏览器中不容易找到确切的代码,这个时候debugger语句会非常的好用。

function hello(name) {
  let phrase = `Hello, ${name}!`;

  debugger;  // 

5.条件断点

有时,我们需要在某种条件成立下调试代码,这时我们可以使用条件断点来进行调试。  、 设置条件断点的步骤:

  1. 单击source选项卡。
  2. 打开文件并转到要调试的代码行。
  3. 代码左侧找到行号列。右键单击它。
  4. 选择add conditional breakpoint.. ,代码行下方会显示一个对话框。
  5. 在对话框中输入条件。
  6. 按 Enter 键激活断点。
    此时,我们可以看到条件断点的标识和普通断点的标识不一样,具体如何不一样,视操作系统和浏览器版本不同而不同。

6.Dom更改断点

当我们需要调试change dom节点及子节点的代码时,使用dom改变断点会比较好。
设置一个dom chang的断点的步骤:

  1. 单击elements选项卡。
  2. 转到要设置断点的元素。
  3. 右键单击该元素。
  4. 将鼠标悬停在Break 上, 然后选择子Subtree modificationsAttribute modifications, 或 Node removal.。
DOM 更改断点的类型
  • Subtree modifications: 当当前选中节点的子节点被移除或添加,或者子节点的内容被改变时触发。不会在子节点属性更改或当前节点的更改时触发。
  • Attribute modifications: 在当前选择的节点上添加或删除属性时触发,或者当属性值更改时触发。
  • Node removal: 当当前选中的节点被移除时触发。

7.XHR/Fetch 断点

如果您在 AJAX 请求中遇到错误并且无法识别提交此请求的代码,那么 XHR 断点对于快速查找 AJAX 源代码非常有用。当我们遇见了一个ajax请求错误,同时又找不到触发此请求的代码,此时,xhr断点对于快速找到ajax源码将会非常的有用。

当AJAX请求的URL包含指定字符串时,XHR断点会暂停代码的执行。AJAXsend()fetch()方法支持 XHR 断点。

设置XHR断点的步骤:

  1. 单击source选项卡。
  2. 展开XHR 断点窗格。
  3. 单击添加断点
  4. 输入要中断的字符串。当此字符串出现在XHR请求URL的任何位置时,DevTools 会暂停。
  5. Enter确认。

8.事件监听器断点

当我们想调试事件触发后的事件监听器代码时,我们可以使用事件监听器断点,我们可以选择特定的事件,例如鼠标下的click事件,clipboard类别下的剪切、复制、粘贴。

设置事件侦听器断点的步骤:

  1. 单击source选项卡。
  2. 展开Event Listener Breakpoints窗格。DevTools显示事件类别列表,例如AnimationCanvasClipboardMouse等。

3.  选中 ☑ 类别以包括该类别下的所有事件,或展开类别并选中 ☑ 特定事件。

9.异常断点

Chrome devtools允许我们在抛出捕获或未捕获的异常时暂停JavaScript代码的执行。当代码没有抛出错误并且无提示却执行失败时,这个技巧非常有用。设置异常断点的步骤:

  1. 单击source选项卡。

  2. 单击Pause on exceptions图标。启用时变为蓝色。

  3. 如果您还想在捕获的异常上也暂停执行,请勾选☑ Pause on uncaught exceptions

image.png

10. Function断点

使用debug(functionName)方法调试函数, 其中functionName是要调试的函数名,当我们需要调试一个具体的函数时,我们可以在代码中插入debug()函数,使用了debug()就和在函数的第一行打了一个行断点是一样的,

function sum(a, b) {
  let result = a + b; // 代码将会在这行暂停执行
  return result;
}
debug(sum); 
sum();

把以上代码复制到devtools控制台执行,将会看到调试效果。

总结

时间和篇幅原因,今天分享js调试技巧的上部分,下次将分享下部分,敬请期待。

最后的话

js的调试技巧(一)的更多相关文章

  1. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  2. HTML5数字输入仅接受整数的实现代码

    这篇文章主要介绍了HTML5数字输入仅接受整数的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. amaze ui 的使用详细教程

    这篇文章主要介绍了amaze ui 的使用详细教程,本文通过多种方法给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  4. html5简介_动力节点Java学院整理

    这篇文章主要介绍了html5简介,用于指定构建网页的元素,这些元素中的大多数都用于描述网页内容,有兴趣的可以了解一下

  5. ios 8 Homescreen webapp,关闭和打开iPad停止javascript

    我有一个适用于iPad的全屏HTML5网络应用程序,并且刚刚安装了IOS8来试用它,它一切正常,直到你关闭并重新启动iPad.一旦web应用程序重新启动javascript就会停止并加载新页面不会重新启动它.在iPad上的Safari中打开同一页面时,关闭和打开iPad会继续按预期工作.其他人注意到了这个或想出了一个解决方案吗?解决方法这似乎是我在iOS8.1.1更新中解决的.

  6. iOS 6 javascript与object.defineProperty的间歇性问题

    当访问使用较新的Object.defineProperty语法定义属性的对象的属性时,有没有其他人注意到新iOS6javascript引擎中的间歇性错误/问题?https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineProperty我正在看到javascript失败的情况,说

  7. ios – 如何使用JSExport导出内部类的方法

    解决方法似乎没有办法将内部类函数导出到javascript.我将内部类移出并创建了独立的类,它起作用了.

  8. 静音iOS推送通知与React Native应用程序在后台

    我有一个ReactNative应用程序,我试图获得一个发送到JavaScript处理程序的静默iOS推送通知.我看到的行为是AppDelegate中的didReceiveRemoteNotification函数被调用,但是我的JavaScript中的处理程序不会被调用,除非应用程序在前台,或者最近才被关闭.我很困惑的事情显然是应用程序正在被唤醒,并且它的didReceiveRemoteNotifi

  9. ios – 内存泄漏与UIWebView和Javascript

    清楚地包含一个Javascript文件到我的HTML是使UIWebView泄漏内存.当我重复使用相同的UIWebView对象时,或者每当我有内容实例化一个新的漏洞时,会出现泄漏的事实,导致我认为必须有一些JavaScript文件被loadHTMLString处理,导致泄漏.有人知道如何解决这个问题吗?

  10. iOS应用程序的UI自动化测试如何与乐器和Javascript

    从WWDC2010视频会议中了解iOS应用程序的自动化UI测试,但没有实践.从代码项目project,我们可以有一个例子.这个问题在这里听到有涉及这个的人.任何限制?解决方法我建议从AlexWollmer开始使用thisblogpost.他创建了一个非常有用的JavaScript库:tuneup_jswithtest()函数,它允许测试分离和有用的帮助者以及为自动化仪器编写测试的断言.

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部