谷歌浏览器调试JavaScript小技巧


Posted in Javascript onDecember 29, 2014

谷歌浏览器不仅仅可以用来上网,对于开发人员来说,它更像是一款强大的开发辅助工具。

工欲善其事必先利其器,接下来笔者给大家分享一些Chrome的使用方法。

假如读者了解如何在Chrome中添加JavaScript断点,那请继续阅读;否则,自行脑补。

假如有这样一段代码:

var a = 1;
function test(){

    var a, b, c, d, e;
    a = 2;

    b = a - 1;

    b = 9;

    c = 3;

    d = 4;

    e = (a + b * c) * (a - d);
    return e;

}
test();

代码本身并不重要,重要的是形式。

假如e是我们最终需要的结果,但是发现结果不正确,于是我们在给e赋值的这一行下断点。

谷歌浏览器调试JavaScript小技巧

下断点之后,把鼠标移动到某个变量上,稍作停留,Chrome便会提示你该变量此时的值。

谷歌浏览器调试JavaScript小技巧

但无奈于表达式比较复杂,仅仅看单个变量的值,没什么作用。看起来都挺正常,计算完就不对了。

这时候,你很可能想知道(a + b c)这一部分的结果,别着急,先将表达式选中,然后将鼠标移动到选中的区域上,稍作停留。

谷歌浏览器调试JavaScript小技巧

Chrome直接告诉你答案了。更有意思的还在后边。

直接在选中的区域单击鼠标右键,会弹出一个菜单,最上边两项分别为:[Add to watch]、[Evaluate in console]。具体对应的视图参考图片。

谷歌浏览器调试JavaScript小技巧

所谓watch,可以理解为监控,有些表达式比较重要,可能需要在整个调试过程中,实时监控该表达式的值,这时就可以用watch。

举个例子,我们把断点设置在"b = 9;"这一行,然后添加watch:"a - b",值为1。如图:

谷歌浏览器调试JavaScript小技巧

点击下一步,执行"b = 9;",也就是说b的值发生了变化,此时再看看watch:"a - b"的值,为-7。

谷歌浏览器调试JavaScript小技巧

这样就达到了实时监控的效果,调试起来更加方便快捷。

接下来再看看console是怎么回事。

console当然就是控制台了,表达式可以直接在控制台中求值。

比如想知道(a + b c)的结果,直接copy到控制台上,回车,结果就出来了。

等等,好像哪里不对的样子,凭什么控制台知道a、b、c的值?

在没有断点的情况下,在控制台中执行JavaScript代码,是面向全局的。也就是说,此时在控制台中定义一个变量x,这个x的作用域是全局的。

如果在程序中断的情况下使用控制台,那么控制台的作用域面向中断处的作用域。也就是说,在哪里设置的断点(或者是代码执行到了哪里),控制台的作用域就在哪里。

就本例而言,在全局范围内定义了一个变量a,值为1;同时又在function test作用域定义了一个局部变量a,值为2。在"a = 2;"处下断点,在控制台中输入a,回车,打印出undefined。

谷歌浏览器调试JavaScript小技巧

因为此时程序在function test内部中断,程序执行到了function test中,所以控制台的作用域也在function test中,因此输入a访问的是局部变量a,而此时局部变量a并未赋值,所以结果为undefined。

这次就先分享这么多,以后遇到给力的继续分享,希望对读者有所帮助。

Javascript 相关文章推荐
浅谈JavaScript编程语言的编码规范
Oct 21 Javascript
判断某个字符在一个字符串中是否存在的js代码
Feb 28 Javascript
jquery简单图片切换显示效果实现方法
Jan 14 Javascript
用队列模拟jquery的动画算法实例
Jan 20 Javascript
深入理解JavaScript系列(28):设计模式之工厂模式详解
Mar 03 Javascript
jquery 构造函数在表单提交过程中修改数据
May 25 Javascript
jquery实现简单合拢与展开网页面板的方法
Sep 01 Javascript
Javascript模仿淘宝信用评价实例(附源码)
Nov 26 Javascript
如何理解Vue的render函数的具体用法
Aug 30 Javascript
jQuery动态添加li标签并添加属性和绑定事件方法
Feb 24 jQuery
JavaScript设计模式之责任链模式实例分析
Jan 16 Javascript
如何阻止小程序遮罩层下方图层滚动
Sep 05 Javascript
JavaScript中的console.trace()函数介绍
Dec 29 #Javascript
JavaScript中的console.profile()函数详细介绍
Dec 29 #Javascript
jQuery中element选择器用法实例
Dec 29 #Javascript
JavaScript中的console.time()函数详细介绍
Dec 29 #Javascript
JavaScript前端图片加载管理器imagepool使用详解
Dec 29 #Javascript
JavaScript版的TwoQueues缓存模型
Dec 29 #Javascript
浅谈重写window对象的方法
Dec 29 #Javascript
You might like
BBS(php & mysql)完整版(四)
2006/10/09 PHP
PHP邮件发送类PHPMailer用法实例详解
2014/09/22 PHP
php中替换字符串函数strtr()和str_repalce()的用法与区别
2016/11/25 PHP
给Function做的OOP扩展
2009/05/07 Javascript
JavaScript中yield实用简洁实现方式
2010/06/12 Javascript
JS判断不同分辨率调用不同的CSS样式文件实现思路及测试代码
2013/01/23 Javascript
js单例模式详解实例
2013/11/21 Javascript
简述Jquery与DOM对象
2015/07/10 Javascript
jquery实现的点击翻书效果代码
2015/11/04 Javascript
canvas实现流星雨的背景效果
2017/01/13 Javascript
Vue监听数据对象变化源码
2017/03/09 Javascript
详解nodejs异步I/O和事件循环
2017/06/07 NodeJs
Vue项目部署在Spring Boot出现页面空白问题的解决方案
2018/11/26 Javascript
vue-cli3.0+element-ui上传组件el-upload的使用
2018/12/03 Javascript
微信小程序调用天气接口并且渲染在页面过程详解
2019/06/24 Javascript
微信小程序防止多次点击跳转和防止表单组件输入内容多次验证功能(函数防抖)
2019/09/19 Javascript
Layui数据表格之单元格编辑方式
2019/10/26 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
vantUI 获得piker选中值的自定义ID操作
2020/11/04 Javascript
[02:45]DOTA2英雄敌法师基础教程
2013/11/25 DOTA
Python创建日历实例
2014/08/21 Python
python文件的md5加密方法
2016/04/06 Python
Python常见字符串操作函数小结【split()、join()、strip()】
2018/02/02 Python
pytorch 自定义数据集加载方法
2019/08/18 Python
python2.7的flask框架之引用js&css等静态文件的实现方法
2019/08/22 Python
解决Django migrate不能发现app.models的表问题
2019/08/31 Python
python小项目之五子棋游戏
2019/12/26 Python
Django model.py表单设置默认值允许为空的操作
2020/05/19 Python
keras中的History对象用法
2020/06/19 Python
浅析python 通⽤爬⾍和聚焦爬⾍
2020/09/28 Python
基于OpenCV的路面质量检测的实现
2020/11/04 Python
让IE可以变相支持CSS3选择器
2010/01/21 HTML / CSS
Canvas绘制浮动球效果的示例
2017/12/29 HTML / CSS
怎样写好自荐信和推荐信
2013/12/26 职场文书
法律专业大学生职业生涯规划书:向目标一步步迈进
2014/09/22 职场文书
党员个人查摆剖析材料
2014/10/16 职场文书