谷歌浏览器调试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之引用类型介绍
Aug 10 Javascript
给ListBox添加双击事件示例代码
Dec 02 Javascript
Javascript中封装window.open解决不兼容问题
Sep 28 Javascript
jQuery动画出现连续触发、滞后反复执行的解决方法
Jan 28 Javascript
angularjs封装bootstrap时间插件datetimepicker
Jun 20 Javascript
详解React 在服务端渲染的实现
Nov 16 Javascript
vue中使用gojs/jointjs的示例代码
Aug 24 Javascript
vue-父子组件和ref实例详解
Nov 10 Javascript
vue-element-admin 菜单标签失效的解决方式
Nov 12 Javascript
Postman内建变量常用方法实例解析
Jul 28 Javascript
javascript实现京东快递单号的查询效果
Nov 30 Javascript
vue 基于abstract 路由模式 实现页面内嵌的示例代码
Dec 14 Vue.js
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
Body是什么,该怎么喝出咖啡里的口感
2021/03/03 咖啡文化
屏蔽浏览器缓存另类方法
2006/10/09 PHP
wiki-shan写的php在线加密的解密程序
2008/09/07 PHP
PHP curl 获取响应的状态码的方法
2014/01/13 PHP
Yii操作数据库的3种方法
2014/03/11 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
2014/06/19 PHP
PHP冒泡算法详解(递归实现)
2014/11/10 PHP
Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()
2019/10/23 PHP
jquery ajax提交表单数据的两种方式
2009/11/24 Javascript
jquery的flexigrid无法显示数据提示获取到数据
2013/07/19 Javascript
纯js实现仿QQ邮箱弹出确认框
2015/04/29 Javascript
JS实现自动变换的菜单效果代码
2015/09/09 Javascript
原生js实现数字字母混合验证码的简单实例
2015/12/10 Javascript
创建简单的node服务器实例(分享)
2017/06/23 Javascript
jQuery中内容过滤器简单用法示例
2018/03/31 jQuery
微信JSSDK实现打开摄像头拍照再将相片保存到服务器
2019/11/15 Javascript
关于vue3.0中的this.$router.replace({ path: '/'})刷新无效果问题
2020/01/16 Javascript
python fabric实现远程操作和部署示例
2014/03/25 Python
python删除指定类型(或非指定)的文件实例详解
2015/07/06 Python
Django框架中数据的连锁查询和限制返回数据的方法
2015/07/17 Python
Python使用SocketServer模块编写基本服务器程序的教程
2016/07/12 Python
Tensorflow环境搭建的方法步骤
2018/02/07 Python
如何使用Python的Requests包实现模拟登陆
2018/04/27 Python
由Python编写的MySQL管理工具代码实例
2019/04/09 Python
Python实现 版本号对比功能的实例代码
2019/04/18 Python
详解python运行三种方式
2019/05/13 Python
使用coverage统计python web项目代码覆盖率的方法详解
2019/08/05 Python
python网络编程 使用UDP、TCP协议收发信息详解
2019/08/29 Python
使用python matplotlib 画图导入到word中如何保证分辨率
2020/04/16 Python
Python并发concurrent.futures和asyncio实例
2020/05/04 Python
html5 利用重力感应实现摇一摇换颜色可用来做抽奖等等
2014/05/07 HTML / CSS
法国娇韵诗官方旗舰店:Clarins是来自法国的天然护肤品牌
2018/06/30 全球购物
非功能性需求都包括哪些方面
2013/10/29 面试题
个人查摆剖析材料
2014/02/04 职场文书
2016年感恩节寄语
2015/12/07 职场文书
Python实现Hash算法
2022/03/18 Python