JavaScript如何调试有哪些建议和技巧附五款有用的调试工具

JavaScript029

JavaScript如何调试有哪些建议和技巧附五款有用的调试工具,第1张

浏览器开发者工具

我个人最喜欢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语句,执行中断。当前作用域的上下文出现在控制台中,还有所有的局部变量和全局变量。将鼠标光标移到变量上可以查看变量的值。

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

JavaScript

if (condition) { debugger}

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

节点变化的断点

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

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

节点变化的断点

DOM断点的类型可能包括:

选定节点树状子目录(sub-tree)中的节点变化,

选定节点的属性发生变化,

节点被删除。

避免记录引用类型

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

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

JavaScript

var wallets = [{ amount: 0 }]setInterval( function() { console.log( wallets, wallets[0], wallets[0].amount )wallets[0].amount += 100}, 1000 )

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

记录参考类型

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

表格记录

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

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

JavaScript

console.table( [ { id: 1, name: 'John', address: 'Bay street 1' }, { id: 2, name: 'Jack', address: 'Valley road 2.' }, { id: 3, name: 'Jim', address: 'Hill street 3.' } ] )

输出是非常好看的表格。所有原始类型都立刻显示出来,它们的值反应记录时的状态。也可以记录复杂类型,显示内容为其类型,内容无法显示。因此,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分别代表D、C、B和A。

访问调用栈

JavaScript

var f = function() { g()} var g = function() { h()}var h = function() { console.trace('trace in h')}f()

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

性能审查

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

审查工具举例:

Chrome开发者工具的Audit标签页

YSlow

熟能生巧

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

五个常用的js调试工具

JavaScript被称作以原型(prototype)为基础的语言。这种语言有很多特色,比如动态和弱类型,它还有一等函数(first class function)。另一个特点是它是一个多范型(multi-paradigm)语言,支持面向对象、声明式、函数式的编程风格。

JavaScript最初被用作客户端语言,浏览器实现它用来提供增强的用户接口。JavaScript在很多现代的网站和Web应用程序中都有应用。JavaScript的一个很棒的功能也很重要,就是我确实可以用它来提高或改善网站的用户体验。JavaScript也可以提供丰富的功能和交互的组件。

JavaScript在这技术高速发展的同时变得非常受欢迎。因为受欢迎JavaScript也改进了许多,修改JavaScript脚本有很多事要做。这次我们为开发者带来了几个非常有用的JavaScript调试工具。

1)Drosera

可以调试任何WebKit程序,不仅仅是Safari浏览器。

2)Dragonfly

源代码视图有语法高亮,可以设置断点。强大的搜索功能,支持正则表达式。

3)Getfirebug

可以在任何网页编辑、调试和实时监视CSS、HTML和JavaScript。

4)Debugbar

5)Venkman

Venkman是Mozilla的JavaScript调试器名称。它旨在为以Mozilla为基础的浏览器(Firefox, Netscape 7.x/9.x and SeaMonkey)提供一个强大的JavaScript调试环境。

前端开发最爽的地方就在于,一个编辑器,一个浏览器就足矣走天下。

编辑器——VSCode

前端开发利器,超级好用的编辑器,对于大前端来说更是不可多得。由微软出品,跨平台支持,颜值高,易上手,丰富的插件支持。下面推荐几个前端常用插件。

调试工具: 前端性能优化工具:

Yellow Lab Tools :一款Web性能及前端质量测试工具。与其他工具不同的是,它有一些在其他工具上无法看到的独特功能,例如页面加载时 JavaScript 与 DOM 互动和其他程序代码验证问题。

DOM monster :你只需要添加到你的浏览器书签中,在任何需要调试的页面点击这个书签,它就能够帮助你列出目前页面出现的性能问题。

前端开发是目前一个非常火的行业,就业前景和薪资水平都非常不错,至于开发工具的话,那就非常多了,大部分代码编辑器、IDE环境都支持,下面我简单介绍4个非常不错的前端开发工具,感兴趣的朋友可以尝试一下:

01 代码编辑器

这是目前前端开发一个非常流行的开发工具,在业界非常受欢迎,免费、开源、跨平台,由微软自主研发,可以说是良心产品,常见的智能补全、代码高亮、语法提示等功能这个软件都能很好支持,除此之外,插件扩展非常丰富,可以很好的进行代码编辑和调试,轻巧灵活,运行速度快,对于前端开发来说,是一个非常不错的选择:

这也是一个比较轻巧灵活的代码编辑器,文本编辑功能强大,完美支持3大操作平台,但原则上不免费,和VS Code类似,Sublime Text也支持自动补全、语法提示、代码高亮等常见功能,除此之外,针对前段开发也提供了非常多的插件,不管是编辑还是调试代码来说,都非常方便,对于前端开发来说,也是一个不错的选择:

02 IDE环境

这是一个纯粹的国产Web IDE开发工具,目前在前端开发中也有着较高的使用率,常见的自动补全、代码高亮、语法提示、错误检查等功能这个软件都能很好兼容,除此之外,界面柔绿、清爽护眼,针对Vue专门打造了插件扩展,可以很好的提高开发效率,还支持安卓、iOS打包,对于前端开发来说,也是一个非常不错的工具:

这是一个非常专业的Web IDE开发工具,Jetbrains公司的产品,被誉为“Web前端开发神器”、“最智能的JavaScript IDE”,除了基本的智能补全、代码高亮、语法提示等常见功能,这个软件还支持代码分析与重构、 联想查询、 单元测试等高级功能,因此在开发效率上更高,也更适合大型项目,对于多人协作的前端开发来说,是一个非常不错的选择:

WebStorm

和idea同属于jetbrains公司开发的,它是旗下一款JavaScript开发工具,被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。

早起作为一个插件可以集成与Eclipse中来开发前端,现在已经独立出来,也是我最早接触js所使用的一款开发工具,如果熟悉了Eclipse快捷键的童鞋可以快速上手。

一款代码编辑器,借助丰富的插件资源,可以扩展成强大的前端开发工具,和IDE相比,属于一款轻量级的,启动特别快。

Atom

作为开源老大哥GitHub出的一款代码编辑器,和上面那个比较而言,插件略少,但和GitHub无缝结合,尤其是markdown编写,界面也很漂亮。

TextMate是Mac下的著名的文本编辑器软件,与BBedit一起并称苹果机上的emacs和vim。尤其适合程序员使用,可以定制许多贴心使用的功能。

Emacs即Editor MACroS(宏编辑器),是一种强大的文本编辑器。Emacs使用了Emacs Lisp这种有着极强扩展性的编程语言(它的核心是一个Emacs Lisp解释器),并实现了文本编辑支持等的扩展。

Notepad++是 Windows操作系统下的一套文本编辑器(软件版权许可证: GPL),有完整的中文化接口及支持多国语言编写的功能(UTF8 技术)。

VSC-VSCode

轻量快速,高颜值,社区开源,丰富扩展,微软支持

还有超好用的远程开发(vscode remote)和协作(live share)支持

HTML通常会和JavaScript、CSS同时出现。三者均是前端开发最常用到的。目前最常用到的HTML其实就是HTML5。常用的前端编程软件有HBuilder、Sublime Text等等。

HBuilder是一款免费的国产前端开发工具,编者用的就是HBuilder,对于小白和英语不太好的前端开发者这是一款难得的IDE。对代码自动补全方面简直是强大到没朋友。强力推荐。

Sublime Text是一个轻量级的编辑器,不端支持前端的html,js,css。还支持觉得多数的后端语言,比如C语言、java、python等。sublime text的强大之处是支持各种插件而且快捷键非常好用,可以极大的提高开发效率。缺点是代码提示方面不如Hbuilder。

很高兴能回答你的问题,作为一个后端开发,也曾经开发过前端,也用过很多前端开发工具。

1.sublime text用着确实不错,但是代码开发提示不强,平时用着文本编辑器还是可以的。

2.hbuild+用了一段时间各种不适用,最后就卸载了。

3.vs code用着一段时间写vue,需要安装插件,而且提交代码用感觉不方便,把不想提交的最后提交了,导致代码冲突,也许是因为自己用不熟。

4.webstorm 推荐使用,代码智能提示,而且提交代码方便。

无论是Python、Java、javascript,当我们选择一款开发工具时,很多人都会首先想到jetbrain全家桶,Webstorm、IDEA、Pycharm....不得不说,jetbrain在开发工具方面真的是颇有心得、炉火纯青。

但是,如果做前端开发,我认为除了jetbrain的webstorm,还有很多选择,而其中我最为推荐的当属VS Code,下面就来介绍一下。

VS Code

微软在开发工具领域已经有了多年积淀,而VS Code有时微软结合了visual studio和其他开发工具,不断改进、优化推出的一款免费开发工具。

可以说VS Code是当下最为热门的开发工具之一,对比于eclipse、IDEA这些老牌开发工具,微软对于VS Code的改变更为大胆创新,已经处于领头羊的地位。每年微软开发者大会,都会对 VS Code进行大幅度的创新,经过多年的优化,VS Code已经让很多开发者爱不释手。

首先说一下它几个为人熟知的优点,

首先说一下轻量化,我觉得仅凭这一点,就足以让jetbrain全家桶汗颜。无论是webstorm、还是IDEA,最令人痛苦的就是打开过程,臃肿、漫长,加载工程项目和配置项需要多大几分钟,令人无法忍受。而VS Code则不同,它更像一个编辑器,能够秒级打开,速度堪比UE、notepad++这些文本编辑器。

其次说一下丰富插件,丰富的插件造就了VS Code完整的生态,“你想要的,这里都有”,无论是标签样式还是DEBUG或者功能增强,VS Code都有非常多热门的插件,使得你的开发效率大大提升,当然,前端需要的那些优质插件这里都有。

其实,让我转向VS Code并非上述这两点,而是 远程开发 。

我觉得这是微软大胆创新和引领者角色必然的产物,让很多其他开发工具很难望其项背。

有了VS Code远程开发功能,我们可以实时同步本地和服务器代码,不需要再去复杂的配置远程服务器,对于项目管理也非常方便。

WebStorm和PS

尤其PS,平时生活中也需要用到,挺方便的

喜欢用webstorm,atom和vs code,sublimetext都装了,几乎只用webstorm,atom界面是漂亮,也是我第一个下载安装的,装了各种插件,那时初学,感觉提示不全,还有就是插件安装了几个后开机明显变好慢,无奈下了webstorm,感觉很爽

Google PageSpeed Insights 可以为网站生成性能报告,它在移动设备和桌面设备上都是免费的。并且还给出了影响页面加载速度的原因,并为这些问题提供了解决方案。网站速度按照 100 分进行划分,其中:

2. Pingdom Website Speed Test

Pingdom Website Speed Test 可以全面分析影响页面Web速度的因素。此外,还可以查看网站在亚洲、欧洲等多个不同的地理位置的性能信息。

3. WebPagetest

WebPagetest是 AOL 开发的一款在线的免费性能评测网站,从全球多个地点运行免费网站速度测试。可以运行简单的测试或执行高级测试,包括多步骤事务、视频捕获、内容阻塞等等。还将依据测试结果提供丰富的诊断信息,包括资源加载瀑布图,页面速度优化检查和改进建议,会给每一项内容一个最终的评级。

4. GTmetrix

GTmetrix 是一个类似于 pingdom 的工具,可以快速轻松地测试网站速度。它主要有PageSpeed和YSlow两部分组成,并提供相应的得分数据,能够真实的反应出网站的性能,并且会提供可行性建议来帮助改善网站性能。

5. Keycdn Tool

Keycdn Tool 是一个在全球 10 不同地点的网站速度测试工具。它允许测试任何页面的性能。返回的结果将提供请求、内容大小和加载时间等详细信息。此外,还有一个完整的瀑布图,详细说明了每个资源的加载时间和 HTTP 头。

6. GiftOfSpeed

GiftofSpeed是一款免费网站载入速度测试工具,可以在上面获得网站综合性能信息,它能够展示网站加载时间以及评估网站有哪些需要改进的地方,并给予一个客观的综合评分。

GiftofSpeed 的测试结果以瀑布流展示,可以很容易看到网站加载速度,每一项资源的的载入顺序、大小与响应时间的长短,方便了解网站的各项载入资源。此外,它还提供了载入时间最长的内部文件以及外部文件,从而分析出是由哪些因素影响了你网站的载入速度,就可以专门针对这些载入时间较长的元素进行优化,从而最大限度提升网站载入速度。

7. Pagelocity

Pagelocity 是一个网站分析性能测试工具。这个工具也提供了追踪竞争对手的能力。代码检视图在类似工具中是独一无二的。如果想知道 TTFB 和图形化 DOM 元素等,都能通过这项工具获取到。

8. Sucuri Loadtime Tester

Sucuri Load Time Tester 是一个网站分析性能测试工具,它用不同的颜色表示网速快慢,可以很直观地看出测试网站在不同国家的运行速度。绿色表示畅通,没有颜色的普通数字表示一般,黄色表示中等偏慢,红色表示缓慢。

9. GEEKFLARE

GEEKFLARE 这是一套免费的性能测试工具,用于测试网站的 DNS、安全性、性能、网络和 SEO 等问题。

10. Dareboost

DareBoost 是一个免费网站速度测试和网站分析工具。它提供超过 100 种不同的检查项目用以分析你的网站的速度。可以测试桌面端与行动页面、Firefox 与 Chrome 和五个节点的速度差异。

concat()连接两个或更多的数组,并返回结果。

join()把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。

pop()删除并返回数组的最后一个元素

push()向数组的末尾添加一个或更多元素,并返回新的长度。

reverse()颠倒数组中元素的顺序。

shift()删除并返回数组的第一个元素。

slice()从某个已有的数组返回选定的元素等等。