JavaScript 调试建议和技巧

浏览器开发者工具

我个人最喜欢Chrome开发者工具。虽然Safari和Firefox无法达到Chrome那么高的标准,但它们也在逐渐改善。在Firefox中,可以将Firebug和Firefox开发者工具组合使用。如果Firefox小组在改进内置开发者工具方面继续表现优异的话,Firebug有一天可能会被淘汰。

先把个人偏好放在一边,你应该能够在目标浏览器中对任意代码进行试验和调试。你的目标浏览器可能包括著名的IE8,也可能不包括。

要熟悉你自己选择的开发者工具。你还可以从IDE(集成开发环境)或者第三方软件获得额外的调试支持。

在各种调试工具中,调试的基础知识是相通的。事实上,我是在90年代从Borland的C开发者环境中学习的调试基础。断点、条件断点、监视与最新版Chrome开发者工具是完全相同的。2000年左右,我在Java中捕获到第一例异常。堆栈跟踪(Stack traces)的概念依然适用,即使JavaScript术语将其称作错误(Error),检查堆栈跟踪仍然和以前一样有用。

有些知识点是前端开发特有的。例如:

  • DOM检查
  • DOM断点
  • 调试事件
  • 内存泄露分析

断点

使用debugger语句可以在源代码中增加断点。一旦到达debugger语句,执行中断。当前作用域的上下文出现在控制台中,还有所有的局部变量和全局变量。将鼠标光标移到变量上可以查看变量的值。

在代码中还可以创建条件断点:

还可以根据自己需要在开发者工具中插入断点和条件断点。在Chrome开发者工具中,在Sources视图中点击行号即可增加断点。如果在断点上点击右键并选择“编辑断点(Edit Breakpoint)”,你还可以增加断点条件。

节点变化的断点

如果你的任务是调试垃圾代码,你可能会有这样的问题:为什么DOM节点在执行过程中发生了改变。Chrome开发者工具提供了一种方便的断点,可用来检测元素树中的节点变化。

在Elements视图中,右键点击一个元素,从右键菜单中选择“Break on…”。

节点变化的断点

DOM断点的类型可能包括:

  • 选定节点树状子目录(sub-tree)中的节点变化,
  • 选定节点的属性发生变化,
  • 节点被删除。

避免记录引用类型

当记录对象或数组时,原始类型的值在引用对象记录中可能会发生变化。当查看引用类型时一定要记住,在记录和查看期间,代码执行可能会影响观测到的结果

例如,在Chrome开发者工具中执行以下代码:

记录的第二个和第三个属性的值是正确的,第一个属性中对象引用的值是不可靠的。当你第一次在开发者工具中显示这个属性时,amount域的值就已经确定了。无论你对同一个引用关闭并重新打开多少次,这个值都不会变化。

记录参考类型

永远记得你在记录什么。记录原始类型时,使用带断点的watch表达式。如果是异步代码,避免记录引用类型

表格记录

在一些开发者工具中,你可以用console.table在控制台中记录对象数组。

尝试在你的Chrome开发者工具中执行下列代码:

输出是非常好看的表格。所有原始类型都立刻显示出来,它们的值反应记录时的状态。也可以记录复杂类型,显示内容为其类型,内容无法显示。因此,console.table只能用来显示具有原始类型值的对象构成的二维数据结构。

XHR断点

有时你可能会遇到错误的AJAX请求。如果你无法立刻确认提交请求的代码,XHR断点可以帮你节省时间。当提交某一特殊类型的AJAX时,XHR断点将会终止代码的执行,并将提交请求的代码段呈现给用户。

在Chrome开发者工具的Sources标签页中,其中一个断点类型就是XHR断点。点击+图标,你可以输入URL片段,当AJAX请求的URL中出现这个URL片段时,JavaScript代码将会中断。

事件监听器断点

Chrome开发者工具可以捕获所有类型的事件,当用户按下一个键、点击一下鼠标时,可以对触发的事件进行调试。

异常时暂停

Chrome开发者工具可以在抛出异常时暂停执行JavaScript代码。这可以让你在Error对象被创建时观察应用的状态。

异常时暂停

代码片段

Sources标签页左侧面板上有一个代码片段(Snippet)子标签页,可用于保存代码片段,帮你调试代码。

如果你坚持使用控制台调试,反复写相同的代码,你应该将你的代码抽象成调试片段。这样的话,甚至还可以把你的调试技巧教给你的同事。

Paul Irish发布过一些基本的调试代码片段,例如在函数执行前插入断点。审查这些代码片段,并在网上搜索其他代码片段,这是很有价值的

在函数执行前插入断点

如果你可以得到函数调用的源代码,你还可以在函数调用前插入断点来终止函数的执行。如果你想调试f函数,用debug(f)语句可以增加这种断点。

Unminify最小化代码

译者注:unminify 解压缩并进行反混淆

尽可能使用 source map。有时生产代码不能使用source map,但不管怎样,你都 不应该直接对生产代码进行调试

(译者注:sourcemap 是针对压缩合并后的web代码进行调试的工具)

如果没有source map的话,你最后还可以求助于Chrome开发者工具Sources标签页中的格式化按钮(Pretty Print Button)。格式化按钮{}位于源代码文本区域的下方。格式化按钮对源代码进行美化并改变行号,这使得调试代码更加方便,堆栈跟踪更加有效。

格式化按钮只有在不得已时才会使用。从某种意义上来说,丑代码就是难看,因为代码中的命名没有明确的语义

DOM元素的控制台书签

Chrome开发者工具和Firebug都提供了书签功能,用于显示你在元素标签页(Chrome)或HTML标签页(Firebug)中最后点击的DOM元素。如果你依次选择了A元素、B元素和C元素,

  • $0 表示C元素
  • $1 表示B元素
  • $2 表示A元素

如果你又选择了元素D,那么$0$1$2$3分别代表DCBA

访问调用栈

Chrome开发者工具中的Sources标签页也在Watch表达式下面显示调用栈。

性能审查

性能审查工具通常是很有用的。这些工具可以用于防止内存泄露,还可以检测到你的网站哪里需要优化。由于这些工具并不了解你的产品,你可以忽略其某些建议。通常来说,性能分析工具能够有效范围,可以使你的网站显著优化。

审查工具举例:

  • Chrome开发者工具的Audit标签页
  • YSlow

熟能生巧

你可能熟悉某些调试技巧,其他技巧也会帮你节省不少时间。如果你开始在实践中使用这些技巧,我建议你几周之后重新阅读本文。你将会惊奇地发现,你的关注点在几周内就发生了变化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 首先,您可以通过以下方式快速学习JavaScript:1)阅读相关书籍和文章,2)完成在线教程,3)参加实际的JavaScript课程,4)练习编写简单的JavaScript代码,5)多多参与JavaScript相关的社区和论坛交流。 ### 回答2: 要快速学好JavaScript,以下是几点建议: 1. 学习基础知识:首先,掌握JavaScript的基础语法和概念,了解变量、数据类型、运算符、条件语句、循环语句等基本知识。可以通过阅读教材、观看在线教程或参加培训来学习。 2. 实践编程:学以致用是学习任何编程语言的有效方法,所以尽可能地实践编写JavaScript代码。可以通过解决编程问题、完成小项目或参与开源项目等方式来提高自己的实践能力。 3. 掌握常用技术:JavaScript通常与HTML和CSS一同使用,所以建议同时学习这三者。熟悉DOM操作、事件处理、AJAX等常用的前端技术,这些能帮助你更好地应用JavaScript。 4. 与他人学习:参加编程社区或者加入相关的学习群组能够提供经验的分享和交流。可以通过讨论、互助和合作来加深对JavaScript的理解和掌握。 5. 阅读优秀的代码:阅读其他优秀的JavaScript代码可以提高自己的编码技巧和思维方式。可以从Github、开源项目或者博客中找到一些值得学习的代码来阅读。 6. 持续学习和更新:JavaScript是一门不断发展的语言,要跟上最新的技术趋势和最佳实践,需要持续学习和保持更新。 总而言之,要快速学好JavaScript,需要坚持学习、勤于实践、与他人交流,并且时刻保持对新知识的开放和探索。 ### 回答3: 要快速学好JavaScript,可以按照以下几个步骤进行: 第一步,建立基础知识。首先了解JavaScript的基本概念和语法规则,可以阅读相关的教材或在线教程,掌握变量、数据类型、运算符、函数等基本概念。 第二步,实践编程。通过实际编写JavaScript代码,将理论应用到实践中。可以找一些简单的练习题或项目,按照提示或要求编写代码,逐步增加难度,提升编程能力。 第三步,学习高级特性。学习JavaScript的高级特性,如闭包、原型链、异步编程等。这些特性在实际编程中经常用到,掌握它们可以更好地应对复杂的编程任务。 第四步,参考文档和工具。查阅JavaScript的官方文档或相关教程,了解JavaScript的各种API和功能。同时,掌握一些常用的JavaScript开发工具,如代码编辑器、调试工具等,可以提高开发效率。 第五步,阅读优质代码。阅读其他人写的优秀JavaScript代码,学习他们的编码风格、逻辑思维和技巧。可以参与开源项目,与其他开发者交流,提升自己的编程水平。 第六步,不断练习。要快速学好JavaScript,需要进行持续的练习和实践。可以每天花一些时间编写JavaScript代码,锻炼自己的编程能力。 总之,学习JavaScript需要有系统地学习和实践,同时要保持持续的学习动力和探索精神。尽量接触并实践各种类型的项目,不断提升自己的编程技能和经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值