控制台的使用

chrome控制台使用(Using the Console)

控制台提供了两个主要的方法给开发者测试网页和应用程序:

通过使用控制台提供的Console API方法来诊断日志信息,比如说:console.log(),console.profile().

即时响应的命令窗口可以和document以及chrome开发工具相互联调.在控制台可以直接测试表达式,并且可以使用Command Line API提供的方法,比如$()可以查找元素,或者使用profile()来打开CPU分析器.

本文提供关于这两个API的概述和一些基本使用,你也可以直接去Console APICommand Line API查看详细信息.

基础操作

打开控制台

在调试工具里面有两种有效的方式打开控制台:主标签栏里面的console标签,或者当你在其他标签里面时作为分离的视图展示出来(比如在Elements或者Sources).

要打开控制台,做下面任意一种操作:

  • 按住 Command - Option - J (Mac) 或者 Control -Shift -J(Windows/Linux).
  • 选择 View > Developer > JavaScript Console.
  • 按下 F12 > console

当你在其他标签栏内时可以按下Esc键打开或关闭控制台的分离视图,或者也可以点击在chrome调试工具窗口左下角的Show/Hide Console按钮.看图说话

清除控制台历史记录

要清除控制台历史记录,可以选择一下方式中的一种:

  • 右击或者Ctrl-click控制台内任何区域出现文本菜单选择Clear Console.
  • 在控制台输入clear()回车(Command Line API).
  • 输入console.clear()回车(Console API).
  • 按下键盘上 ⌘K 或者 ⌃L (Mac) Control - L (Windows and Linux).

当你跳转到其他网页时控制台默认会清空历史记录,通过控制台区域的设置对话框设置Preserve log upon navigation可以改变这个行为 (详见 Console preferences).

控制台设置

控制台有两个全局的设置可以修改在通用的设置对话框内:

  • Log XMLHTTPRequests—每一个完成的XMLHTTPRequest 请求显示在空台上.
  • Preserve log upon navigation—页面刷新或跳转时不清除历史记录. 默认两个设置是不生效的.

也可以右击控制台内任意区域在弹出的文本菜单内设置.

Console API的使用

Console API就是调试工具定义的全局对象console提供的方法集合.其中一个主要目的就是当你的应用运行时将日志信息(比如一个变量值,或者一个对象再或者DOM元素)输出到控制台.为了避免视觉混乱也可以有组织的输出到控制台.

控制台的书写

console.log() 方法可以传递一个或多个表达式作为参数,并且会输出他们的当前值到控制台.例如:

var a = document.createElement('p');
a.appendChild(document.createTextNode('foo'));
a.appendChild(document.createTextNode('bar'));
console.log("Node count: " + a.childNodes.length);

通过"+"操作符将表达式连接到一起(如上所示),你可以放置每一个它自己的方法参数而且他们被连接成以空格分隔的行.

console.log("Node count:", a.childNodes.length, "and the current time is:", Date.now());

错误和警告

[console.error()](https://developer.chrome.com/devtools/docs/console-api.md#consoleerrorobject-object)方法会以一个红叉的图标和红色字体展示文本信息.

function connectToServer() {    
console.error("Error: %s (%i)", "Server is  not responding",500);
}
connectToServer();

[console.warn()](https://developer.chrome.com/devtools/docs/console-api.md#consolewarnobject-object)方法会带有黄色图标展示文本信息.

if(a.childNodes.length < 3 ) {    
console.warn('Warning! Too few nodes (%d)', a.childNodes.length);
}

断言

[console.assert()](https://developer.chrome.com/devtools/docs/console-api.md#consoleassertexpression-object)方法会在第一个参数值为false时抛出一个异常(第二个参数).比如下面的例子,当list元素的子节点个数大于500的时候会抛出一个错误信息到控制台.

console.assert(list.childNodes.length < 500, "Node count is > 500");

控制台信息的过滤

通过严格的层级控制可以快速过滤控制台输出信息--错误,警告,或者标准日志信息--选择其中一个过滤选项.可以通过点击漏斗(如下所示)去选择一个你想要使用的条件.

过滤选项:

  • All—展示所有控制台输出信息.
  • Errors—仅展示从console.error()的输出信息
  • Warnings—仅展示从console.warn()的输出信息
  • Logs—仅展示从console.log(), console.info()console.debug()的输出信息.
  • Debug—仅展示从console.timeEnd()和其他控制台输出.

组织化输出

在控制台使用[console.group()](https://developer.chrome.com/devtools/docs/console-api.md#consolegroupobject-object)和groupEnd()命令可以在控制台显示输出一个嵌套块.``

var user = "jsmith", authenticated = false;
console.group("Authentication phase"); 
console.log("Authenticating user '%s'", user); // authentication code here...    
if (!authenticated) {        
  console.log("User '%s' not authenticated.", user)
}    
console.groupEnd();

多层嵌套也是可以的,在下面的示例中创建一个日志组登录过程的验证阶段.如果用户已验证,授权阶段将会创建一个嵌套组.

var user = "jsmith", authenticated = true, authorized = true;// Top-level 
groupconsole.group("Authenticating user '%s'", user);
if (authenticated) {      
console.log("User '%s' was authenticated", user);      // Start nested group      console.group("Authorizing user '%s'", user);      
if (authorized) {            
console.log("User '%s' was authorized.", user);      
}      // End nested group      
console.groupEnd();}// End top-level 
groupconsole.groupEnd();
console.log("A group-less log trace.");

要创建一个默认收起的组,可以使用console.groupCollapsed().看下面的例子:

console.groupCollapsed("Authenticating user '%s'", user);
if (authenticated) { 
 ...
}

字符串替换和格式化

任何一个传递给控制台的日志方法(例如log(),error())的第一个参数都可能包含一个或多个占位符.占位符由一个%和一个声明应该用于插入值类型的字母(比如%s 字符串).占位符会识别在哪替换后面提供的参数值.

下面的例子就是使用%s(字符串)和%d(整数)占位符来插入值到控制台输出中.

console.log("%s has %d points", "Sam", "100");

输出结果是"Sam has 100 points"

下面的表格就是一些占位符的信息:

占位符 描述
%s 字符串.
%d or %i 整数.
%f 浮点数.
%o dom元素的链接.
%O js对象的链接.
%c css格式字符串.

下面的例子是用占位符%d将document的子节点数量式化为整数,用占位符%f将时间格式化为时间戳.

console.log("Node count: %d, and the time is %f.", document.childNodes.length, Date.now());

dom元素&JS对象

默认情况下,当你输出一个DOM元素到控制台显示为XML格式,如元素面板:

console.log(document.body.firstElementChild);

当然也可以使用console.dir()来显示对象的全部属性

console.dir(document.body.firstElementChild);

等价的也可以通过console.log()使用占位符 %O来实现上面的结果.

console.log("%O", document.body.firstElementChild);

控制台&css

在console.log()里面使用占位符%c可以实现在控制台的输出样式.

console.log("%cThis will be formatted with large, blue text", "color: blue; font-size: x-large");

时间检测

[console.time()](https://developer.chrome.com/devtools/docs/console-api.md#consoletimelabel)和console.timeEnd()

方法可以帮助我们检测一个方法需要用多长时间完成.console.time()放在要开始检测的任务前面来开启时间检测,在任务的末尾添加console.timeEnd()来停止,时间差将会输出到控制台.``

console.time("Array initialize");
var array= new Array(1000000);
for (var i = array.length - 1; i >= 0; i--) {      
array[i] = new Object();
};
console.timeEnd("Array initialize");

注意:在console.time()和timeEnd()里面必须要使用相同的字符串,否则可能会得不到你想要的结果.

断点调试

可以开启debug模式在你的js代码中写入[debugger](https://developer.chrome.com/devtools/docs/console-api.md#debugger)命令.下面的例子演示了当brightness()方法执行时呼出debug模式:

brightness : function() {      
debugger;      
var r = Math.floor(this.red*255);      
var g = Math.floor(this.green*255);      
var b = Math.floor(this.blue*255);      
return (r * 77 + g * 150 + b * 29) >> 8;}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容