利用Console来调试JS程序、Console用法总结

来源:互联网 发布:windows loader win8 编辑:程序博客网 时间:2024/06/07 00:04

利用Console来调试JS程序、Console用法总结(1)

一 、什么是 Console

Console 是用于显示 JS和 DOM 对象信息的单独窗口。并且向 JS 中注入1个 console 对象,使用该对象 可以输出信息到 Console 窗口中。

二 、什么浏览器支持 Console

很多人可能都知道 Chrome 和 FireFox(FireBug)中都支持 Console。而其他浏览器都支 持不好。比如 IE8 自带的开发工具虽然支持 Console,但功能比较单调,显示对象的时候都是显示 [Object,Object],而且不能点击查看对象里面的属性。IE6、IE7 虽然可以安装 Developer Toolbar,但也 不支持 console。Safari、Opera 都支持 Console,但使用上都没有 FireBug和 Chrome 的方便。 现在firebug推出了 firebuglite工具,可以让所有浏览器都支持Console功能,而且使用上和FireBug 几乎一样。详见http://getfirebug.com/firebuglite

三 、为什么不直接使用 alert 或自己写的 log

使用 alert 不是一样可以显示信息,调试程序吗?alert 弹出窗口会中断程序, 如果要在循环中显示信息,手点击关闭窗口都累死。而且 alert 显示对象永远显示为[object ]。 自己写的 log 虽然可以显示一些 object 信息,但很多功能支持都没有 console 好,看完后面 console 的介绍就知道了。 
(部分比较鸡肋的方法没有列出来,用粗蓝标出来的是常用的方法)

四、console.log(object[,object,…..])

Console.log 是最简单输出信息到 console 窗口的方法,支持多个参数,该方法会把 这些参数组合在一起显示 
我们首先来写一段倒计时的代码

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html> <head>  <title>倒计时</title>  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> </head> <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script><body>  <h1>倒计时:<span>10</span></h1>  <script type="text/javascript">    $(document).ready(function(){        var num = $("h1 span").first();        var i = 9;        var interval = setInterval(function(){            num.text(i);            i--;            console.log("当前数值:"+i);            if(i < 0){                clearInterval(interval);            }        },1000);    }); </script></body></html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

我们在line:16加入console.log(“当前数值:”+i); 那么在控制台中将输出每次i的值:

这里写图片描述

log 方法第一个参数支持类似 C 语言 printf 字符串替换模式,Log 支持下面几种替换模式:

  • %s 代替字符串
  • %d 代替整数
  • %f 代替浮点值
  • %o 代替 Object

例如,我们输出一个时间日期: 
console.log(“%d年%d月%d日”,2014,6,25);

这里写图片描述

比如,我们要把月份“6月”变成“06月”,那么可以使用“%s”,在传入参数的时候要用引号: 
console.log(“%d年%s月%d日”,2014,’06’,25);

这里写图片描述

五、console.debug,info,warn,error

这 4 种方法与 log 方法使用一模一样,只是显示的图标和文字颜色不一样。

这里写图片描述

六、console.assert(expression[, object, …])

assert 方法类似于单元测试中的断言,当 expression 表达式为 false 的时候,输出后面的信息,e.g:

这里写图片描述

注:assert 方法在 firebuglite 不支持,Chrome 和 FireBug 支持。

七、console.clear()

该方法清空 console 中的所有信息 (Chrome中不支持)

八、console.dirxml(node)

把 html 元素的html 代码打印出来,等同于log。

九、console.trace()

trace 方法可以查看当前函数的调用堆栈信息,即当前函数是如何调用的

这里写图片描述

十、console.group(object[, object, …]), groupCollapsed, groupEnd

这 3 个函数用于把 log 等输出的信息进行分组,方便阅读查看。 
groupCollapsed 方法与 group 方法一样,只是显示的分组默认是折叠的。 
注意:如果后面不跟console.groupEnd(),则第二个分组默认是第一个分组的子节点。

这里写图片描述

十一、console.time(name)/console.timeEnd(name)

我们经常需要测试 js 函数的执行时间,可能我们自己写代码在第1 条语句和 最后 1 条语句取当前时间相减。这组函数其实就实现了这样的功能,time(name)根据 name 创建 1 个新 的计时器。timeEnd(name)停止给定name 的计时器,并显示时间。 
下面给个空的for循环,打印0-1000的i的值,用时124.61ms:

这里写图片描述

十二、console.profile(name)/console.profileEnd()

这组方法用于打开浏览器的分析器,用于分析这组函数之间的 js 执行情况 
注:firebuglite 不支持 profile 功能,Chrome 支持 profile,但分析的内容不详。

十三、console.count([title])

count 方法用于统计当前代码被执行过多少次,title 参数可以在次数前面输出额外的标题以帮助阅读。e.g:

$(function(){   test();   test();   test();   test();});var test = function(){    console.count("test被执行次数:");};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

在Chrome中的结果,会打印出累积次数:

这里写图片描述

而在fireBug中只会显示最后一次最终的次数:test被执行次数:4。

十四、console.table(data)

table 方法把data 对象用表格的方式显示出来,这在显示数组或者格式一样的JSON 对象的时候非常有用。 
注:table 只支持 FireBug,而且是在 firebug1.6+版本后才有。 
此内容将单独开一篇博客,请见《利用console.table()做高级JS调试、Console用法总结(2)》

十五、console.dir(function)

dir方法是把列出对象的所有方法。比如,我们显示console对象下都些什么方法: 
console.dir(console);

这里写图片描述

十六、tab键代码补全

此功能只针对fireBug下,在Chrome下自带代码提示功能 
在fireBug下输入co再按Tab键,将会出现代码提示:

这里写图片描述

而在Chrome下边输入边出现代码提示,很强大。

十五、百度首页的彩蛋!

打开百度首页,查看Javascript输出控制台,呵呵,你发现了什么?百度的招聘启事:

这里写图片描述


利用Console来调试JS程序、Console用法总结(2)

昨天,我发现了一个很棒的JavaScript调试小工具,它是Chrome开发者工具之一。在小型Web开发会议中,Marcus Ross发表了关于在Chrome中实现各种JavaScript调试工具的谈话,其中之一就是我想在此展示的console.table()函数。

通过console.log()记录数组数据 
想象一下你已经创建了一个编程语言及其文件扩展名的表:

var languages = [    { name: "JavaScript", fileExtension: ".js" },    { name: "TypeScript", fileExtension: ".ts" },    { name: "CoffeeScript", fileExtension: ".coffee" }];console.log(languages);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

调用console.log(languages)函数将会使你的数据得到如下显示:

这里写图片描述

显示树状结构图的目的是为了对调试有所帮助,但是我觉得有点麻烦,因为需要手动打开每个折叠的对象。我的意思是,我们可以通过console.table()函数做的更好一点。

通过console.table()记录数组数据 
我们通过调用console.table()来代替console.log()函数的使用: 
console.table(languages);

要确保控制台在刷新页面之前打开,否则你可能会看不到任何输出。如果你的一切操作都正确的话,作为回报,你将看到这个漂亮的小表格视图:

这里写图片描述

很漂亮是吧?更棒的事情是——可以按照表的每一列来排序:

这里写图片描述

当然,此表对于表格格式的数据支持的最好。如果所有对象都有着完全不同的数据结构,你的表中将有大多数单元格含有未定义的值。尽管如此,属性值的整齐排列也会给你一个很棒的总览效果。

通过console.table()记录对象数据 
关于console.table()的另一个好处是它同样适用于对象数据:

var languages = {    csharp: { name: "C#", paradigm: "object-oriented" },    fsharp: { name: "F#", paradigm: "functional" }};console.table(languages);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这里写图片描述

过滤显示对象的属性

如果你想通过某些属性限制表中的列时,你可以通过传递一个键值数组作为console.table()调用的第二个参数:

console.table(languages, [“name”]);

这里写图片描述

对于单个属性,一个简单的字符串参数就足够了:

console.table(languages, “name”);

总结 
我以为我知道大多数Chrome开发者工具自带的功能,但是显然我错了。开发者工具中有很多很多有用的功能,只是在等你去使用它。说真的,去看看官方文档的页面,没准你会发现一些你不知道的很棒的功能。

原文:http://blog.163.com/zhangmihuo_2007/blog/static/270110752014526102948837/