著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处
作者:刘哇勇
链接: https://www. cnblogs.com/Wayou/p/chr ome-console-tips-and-tricks.html
来源:博客园

Chrome的开发者工具已经强大到没朋友的地步了,特别是其功能丰富界面友好的console,使用得当可以有如下功效:

  • 更高「逼格」更快「开发调试」更强「进阶级的Frontender」
  • Bug无处遁形「Console大法好」

console.log

大家都会用log,但鲜有人很好地利用console.error , console.warn 等将输出到控制台的信息进行分类整理。
他们功能区别不大,意义在于将输出到控制台的信息进行归类,或者说让它们更语义化。
各个所代表的语义如下:

  • console.log:普通信息
  • console.info:提示类信息
  • console.error:错误信息
  • console.warn:警示信息

当合理使用上述log方法后,可以很方便地在控制台选择查看特定类型的信息。

console.log('一颗红心向太阳','吼吼~');
console.info('楼上药不能停!');
console.warn('楼上嘴太贱!');
console.error('楼上关你毛事?');

如果再配合console.groupconsole.groupEnd,可以将这种分类管理的思想发挥到极致。这适合于在开发一个规模很大模块很多很复杂的Web APP时,将各自的log信息分组到以各自命名空间为名称的组里面。

console.group("app.foo");
console.log("来自foo模块的信息 blah blah blah...");
console.groupEnd();
console.group("app.bar");
console.log("来自bar模块的信息 blah blah blah...");
console.groupEnd();

而关于console.log,早已被玩儿坏了。一切都源于Chrome提供了这么一个API:第一个参数可以包含一些格式化的指令比如%c

比如给hello world 做件漂亮的嫁衣再拉出来见人:

console.log('%chello world','font-size:25px;color:red;');

如果你觉得不够过瘾,那就把你能写出来的最华丽的CSS样式都应用上吧,比如渐变。于是你可以得到如下华丽丽的效果:

console.log('%chello world', 'background-image:-webkit-gradient( linear, left top, right top, color-stop(0, #f22), color-stop(0.15, #f2f), color-stop(0.3, #22f), color-stop(0.45, #2ff), color-stop(0.6, #2f2),color-stop(0.75, #2f2), color-stop(0.9, #ff2), color-stop(1, #f22) );color:transparent;-webkit-background-clip: text;font-size:5em;');

各种招大招的节奏啊~

看着上面密集的代码不用惊慌,上面console.log()第二个参数全是纯CSS用来控制样式的,你不会陌生。而第一个参数里可以带用百分号开头的转义指令,如上面输出带样式的文字时使用的%c指令。更详细的指令参见官方API文档的这个表格

如果还不够过瘾,那咱们来log一些图片吧,甚至。。。动图?
对,你得先有图,我们拿这张图为例。

console.log("%c", "padding:50px 300px;line-height:120px;background:url('http://wayou.github.io/2014/09/10/chrome-console-tips-and-tricks/rabbit.gif') no-repeat;");

看着上面摇摆的豆比兔是不是有种抽它一脸的冲动。

除此,console.table 更是直接以表格的形式将数据输出,不能赞得太多!
借用之前写过的一篇博文里的例子:

var data = [{'品名': '杜雷斯', '数量': 4}, {'品名': '冈本', '数量': 3}];
console.table(data);

另外,console.log() 接收不定参数,参数间用逗号分隔,最终会输出会将它们以空白字符连接。

console.log('%c你好','color:red;','小明','你知道小红被妈妈打了么');

console.assert

当你想代码满足某些条件时才输出信息到控制台,那么你大可不必写if或者三元表达式来达到目的,cosole.assert便是这样场景下一种很好的工具,它会先对传入的表达式进行断言,只有表达式为假时才输出相应信息到控制台。

var isDebug=false;
console.assert(isDebug,'开发中的log信息。。。');

console.count

除了条件输出的场景,还有常见的场景是计数。
当你想统计某段代码执行了多少次时也大可不必自己去写相关逻辑,内置的console.count可以很地胜任这样的任务。

function foo(){//其他函数逻辑blah blah。。。console.count('foo 被执行的次数:');
}
foo();
foo();
foo();

console.dir

将DOM结点以JavaScript对象的形式输出到控制台
console.log是直接将该DOM结点以DOM树的结构进行输出,与在元素审查时看到的结构是一致的。不同的展现形式,同样的优雅,各种体位任君选择反正就是方便与体贴。

console.dir(document.body);
console.log(document.body);

console.time & console.timeEnd

输出一些调试信息是控制台最常用的功能,当然,它的功能远不止于此。当做一些性能测试时,同样可以在这里很方便地进行。
比如需要考量一段代码执行的耗时情况时,可以用console.timeconsole.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");

当然,我们也可以选择自己写代码来计时:

var start=new Date().getTime();
var array= new Array(1000000);
for (var i = array.length - 1; i >= 0; i--) {array[i] = new Object();
};
console.log(new Date().getTime()-start);

相信你也看到了,用内置的console.time是多么地方便,省去了自己写代码来计算的工作量。另外值得一提的是,通过调用内置的console.time得到的结果要比自己手动计算的时间差更精确可靠。

console.profile & console.timeLime

当想要查看CPU使用相关的信息时,可以使用console.profile配合 console.profileEnd来完成这个需求。
这一功能可以通过UI界面来完成,Chrome 开发者工具里面有个tab便是Profile

与此类似的功能还有console.timeLine配合 console.timeLineEnd,它的作用是开始记录一段时间轴,同样可以通过Chrome开发者工具里的Timeline 标签来进行相应操作。

所以在我看来这两个方法有点鸡肋,因为都可以通过操作界面来完成。但至少他提供了一种命令行方式的交互,还是多了种姿势供选择吧。

console.trace

堆栈跟踪相关的调试可以使用console.trace。这个同样可以通过UI界面完成。当代码被打断点后,可以在Call Stack面板中查看相关堆栈信息。

上面介绍的都是挂在window.console这个对象下面的方法,统称为Console API,接下来的这些方法确切地说应该叫命令,是Chrome内置提供,在控制台中使用的,他们统称为Command Line API

$

似乎美刀总是被程序员及各种编程语言所青睐「你看看PHP代码就知道PHPer有多爱钱了」,在Chrome的控制台里,$用处还真是蛮多且方便的。$_命令返回最近一次表达式执行的结果,功能跟按向上的方向键再回车是一样的,但它可以做为一个变量使用在你接下来的表达式中:

2+2//回车,再
$_+1//回车得5

上面的$_需要领悟其奥义才能使用得当,而$0~$4则代表了最近5个你选择过的DOM节点。
什么意思?在页面右击选择审查元素,然后在弹出来的DOM结点树上面随便点选,这些被点过的节点会被记录下来,而$0会返回最近一次点选的DOM结点,以此类推,$1返回的是上上次点选的DOM节点,最多保存了5个,如果不够5个,则返回undefined

另外值得一赞的是,Chrome 控制台中原生支持类jQuery的选择器,也就是说你可以用$加上熟悉的css选择器来选择DOM节点,多么滴熟悉。

$('body')

$(selector)返回的是满足选择条件的首个DOM元素。
剥去她伪善的外衣,其实$(selector)是原生JavaScript document.querySelector() 的封装。
同时另一个命令$$(selector)返回的是所有满足选择条件的元素的一个集合,是对document.querySelectorAll() 的封装。

$$('div')

copy

通过此命令可以将在控制台获取到的内容复制到剪贴板。

copy(document.body)

然后你就可以到处粘了:

看完此条命令行,机智的你是不是跟脑洞全开的我一样,冒出了这样一个想法:那就是通过这个命令可以在JavaScript里进行复制操作从而不用依赖Flash插件了。
But现实是残酷的,如之前所述的,这里的控制台命令只能在控制台中环境中执行,因为他不依附于任何全局变量比如window,所以其实在JS代码里是访问不了这个copy方法的,所以从代码层面来调用复制功能也就无从谈起。但愿有天浏览器会提供相应的JS实现吧~

keys & values

这是一对基友。前者返回传入对象所有属性名组成的数据,后者返回所有属性值组成的数组。具体请看下面的例子:

var tboy={name:'wayou',gender:'unknown',hobby:'opposite to the gender'};
keys(tboy);
values(tboy);

monitor & unmonitor

monitor(function),它接收一个函数名作为参数,比如function a,每次a被执行了,都会在控制台输出一条信息,里面包含了函数的名称a及执行时所传入的参数。

而unmonitor(function)便是用来停止这一监听。

function sayHello(name){alert('hello,'+name);
}
monitor(sayHello);
sayHello('wayou');
unmonitor(sayHello);
sayHello('wayou');

debug & undebug

debug同样也是接收一个函数名作为参数。当该函数执行时自动断下来以供调试,类似于在该函数的入口处打了个断点,可以通过debugger来做到,同时也可以通过在Chrome开发者工具里找到相应源码然后手动打断点。
undebug 则是解除该断点。

而其他还有好些命令则让人没有说的欲望,因为好些都可以通过Chrome开发者工具的UI界面来操作并且比用在控制台输入要方便。

控制台接收信息转发_Chrome 控制台不完全指南(转)相关推荐

  1. 控制台接收信息转发_微信语音信息无法转发?原来这才是正确的转发姿势,看完涨知识了...

    平常我们在使用微信的时候一定会发现一个小问题,那就是无论是发送出去的语音还是接收到的语音信息,都无法转发给别人.那么微信语音真的不支持转发吗? 笔者尝试了一下平常使用的消息转发,将语音消息进行转发后出 ...

  2. Java——接收用户在控制台的信息,将取到的信息写入lianxi.txt文件中,并且将lianxi.txt内容复制到home.txt中

    一.题目 接收用户在控制台的信息,将取到的信息写入lianxi.txt文件中,并且将lianxi.txt内容复制到home.txt中 二.实现代码 package day08;import java. ...

  3. 【JavaScript学习笔记2】JS中常见的输出方式-控制台输出信息

    引言 在编程开发的过程中,输出信息是非常必要的.JS中提供了四种输出方式:弹出显示框.控制台输出.弹出输入框.弹出判断显示框 弹出显示框 这种方式在上一篇笔记中已经详细介绍,有需要学习的朋友可以跳转到 ...

  4. java控制台计算数字_java从控制台接收一个数字

    //时间:2017/7/22 //作者:江骆 //功能:从控制台接收一个数 import java.io.*;  //引入一个IO流的包 public class helloworld1 { publ ...

  5. ssm idea后端接收数据输出在控制台时出现中文乱码

    idea 后端接收数据输出在控制台时出现中文乱码 环境 maven项目, ssm框架(spring+springmvc+mybatis)注解和配置文件混合开发, tomcat服务器 解决乱码的方式(推 ...

  6. ElasticSearch5.3插件开发(一)控制台打印信息

    自定义插件类继承org.elasticsearch.plugins.Plugin 本文最简单的一个插件,在控制台打印信息: package es.plugins; import org.elastic ...

  7. csgo控制台服务器信息,《csgo》国服控制台怎么打开 控制台指令设置方法

    导 读 控制台可以帮助玩家实现练枪.测试等方便的功能,玩家可以开启控制台输入代码来获得想要的功能,但是还有很多玩家不清楚国服控制台怎么打开,下面就来分享一下csgo国服控制台开启方法. csgo国服控 ...

  8. EasyX接收并显示从控制台输入的数字和英文

    EasyX如何接收并显示从控制台输入的数字和英文 自学EasyX,由于Easyx绘图库里执行不了cin和cout函数,无法通过此方法实现从控制台显示输入的数字和英文 对这个问题困扰很久找不到其他易懂的 ...

  9. 仿百度浏览器控制台打印信息

    在百度搜索页面打开浏览器控制台(F12),看到这么一段提示文字信息. 感觉挺有趣的,它是如何实现的呢?一起动手实践一下吧. 目录 一.预览效果 二.程序代码 一.预览效果 二.程序代码 <!DO ...

最新文章

  1. OpenCV4Android开发实录(2): 使用OpenCV3.4.1库实现人脸检测
  2. html复选框多行排列布局
  3. 变量不同作用域的测试
  4. 第13届年度Webby奖采用Silverlight / 13th Annual Webby Awards powered by Silverlight
  5. Entity Framework加载相关实体——Explicit Loading
  6. numpy中方法参数axis取值理解
  7. swag您的装置不支持_新品发布---微机保护装置
  8. cf修复服务器,CF:“卡顿”问题终于得到重视!新版本宣布修复,玩家这下开心了...
  9. 兰州大学c语言课程作业答案,2016兰州大学C语言程序设计课程作业1附答案.doc
  10. 解决服务器被黑上不了网的问题
  11. MongoDB几个完整的库表设计实例
  12. shell编程基础(二)
  13. LeetCode69 Sqrt(x)**
  14. 数据库SQL优化大总结1之- 百万级数据库优化方案
  15. linux下制作dos启动u盘启动,在Linux系统下创建FreeDOS可启动U盘
  16. windows应用商店打不开,错误代码0x80131500
  17. 【NLP】电影评论情感分析(基础篇)
  18. C++中的PIMPL和NVI
  19. HTML图片映射矩形坐标,HTML图片热区map area的用法(转载)
  20. 蚂蚁金服Java岗内推,quartz定时器的处理

热门文章

  1. windows搭建邮箱服务器分享长期有效
  2. 安卓开发论坛!阿里P8架构师的Android大厂面试题总结,附赠课程+题库
  3. 2020清北学堂秋季营感想——Hoarfrost
  4. 线性代数 --- 投影Projection 一(投影向量p)
  5. 怎样消掉计算机桌面阴影,电脑桌面图标有蓝色阴影是怎么回事?怎么把它去掉...
  6. python 树结构 sql_sqlserver 树结构递归(向上递归和向下递归)
  7. python之__len__()
  8. 网上投票作弊的技术实现(纯技术交流,勿用作他途!!)
  9. 2003打不开计算机管理,win10系统打不开word2003的修复教程
  10. 迷宫问题用‘图’求解