JavaScript最常用的调试工具就是console.info()了。console是浏览器中window对象的属性之一,由浏览器对象模型(BOM)提供,作用是访问浏览器控制台,你可以通过console输出有助于调试代码的字符串、数组、对象。console还附带了一些你平时不了解的好用方法,本文可以丰富你的调试工具。

我们一般通过

window.console.info('hello world');

或者

console.info('hello world');

由于window可以省略所以我们使用后者以精简代码。

输出信息到控制台的四种方式:

  1. console.log();

  2. console.info();

  3. console.warn();

  4. console.error();

我们唯一要做的就是给它们(方法)传递一个或者多个参数。控制台会显示不同的图标和颜色来表示其记录级别。见下图:

不同级别的记录打印代码

不同级别的记录打印效果

你会注意到error日志消息比其他消息更显眼。视觉上区分有助于开发者在控制台快速查看错误或警告信息等。你应该确保什么时候应该警示什么类别的日志信息。

也许上面的功能你已经很熟悉了,那么真正有价值的内容现在开始,请往下看。

字符串替换

这个技术可以使用字符串中的占位符来替换你向方法中传入的其他参数。

输入: console.info('hello %s', 'world');

输出: hello world

代码

效果

%s是第二个参数‘world’的占位符。任何的字符串、整数、数组都可以被转换成字符串并替换%s。如果你传入一个对象,它将显示为[object Object] 或 Object。

Firefox

chrome

如果你想传入对象,你需要使用 %o 或者 %O ,而不是 %s。

console.info('this is an object %o', {obj : 'object'});

传入对象

数字

字符串替换可以与整数和浮点数一起使用:

  • 整数 %i 或 %d

  • 浮点数 %f

输入: console.info('int: %d, float: %f', 1, 1.5);

输出: int: 1, float: 1.500000;

可以使用%.1f来格式化浮点数,这样就只显示一位小数, %nf ,你懂得(显示n为小数)。

总结一下格式化说明符:

  1. %s 使用字符串替换占位符

  2. %(d or i) 使用整数替换占位符

  3. %f ,%nf 使用浮点数替换占位符

  4. %o or %O 占位符显示为一个对象

  5. %c 应用提供css (PS: 可以自己尝试一下,或者看看下面的`彩蛋`吧)

字符串模板

ECMAScript6的出现,模板字符串是替换或连接的替代品。语法是使用反引号(``)来代替引号,变量包裹在 ${ } 中:

const a = 'world';

console.info(` hello: ${a} `);

// hello: world

对象在模板字符串中显示为[object Object]或 Object,所以你仍然可以使用 %o 或 %O 替换。

与你之前使用字符串拼接: console.info('hello: ' + str + '!');,使用替换或者模板创建是不是代码更易读呢!

彩蛋(*&……&*)

现在,我们来实现一个丰富多彩的console,当我们请求一个数据后,请求成功用绿色,请求失败用红色。先看效果:

丰富多彩的日志

const success = [ 'background: green', 'color: white', 'display: block', 'text-align: center' ].join(';');

const failure = [ 'background: red', 'color: white', 'display: block', 'text-align: center' ].join(';'); console.info('%c /dancing/bears was Successful!', success);

console.log({data: { name: 'Bob', age: 'unknown' }});

// "mocked" data response

console.error('%c /dancing/bats failed!', failure);

console.log('/dancing/bats Does not exist');

在字符串替换中使用(上文提到的) %c 占位符来应用你的日志打印行添加样式规则。 控制台仅支持少数CSS样式,并且因浏览器而异。

其他可用的方法

下面几个方法都不是API标准,所以你需要在高版本浏览器下使用。

1、 console.assert(boolean, param); 如果第一个参数计算为FALSE,那么返回第二个参数。如果为TRUE,那么不显示日志。

断言

2、 console.dir();显示一个传入对象的可交互属性列表,节省点开Object对象操作,还不错。

3、 console.table( ['javascript', 'php', 'java'] ); 用一个表格显示数组或对象

请点击此处输入图片描述

chrome用户请注意,table()是不能工作的,你可以通过将项目放入数组或对象来解决这个问题。

console.table( [['javascript', 'php', 'java']] );

4、 console.group(); 由至少3个console调用组成,它将输出多个层级,显示效果如下:

请点击此处输入图片描述

5、 console.time(id) 和 console.timeEnd(id) 启动id的定时器和停止id的定时器。

它可以同时运行多达10,000个定时器。

最后

console的有些方法虽然实用,但是因为它们的API依然在变动,具体可以访问

https://developer.mozilla.org/en/docs/Web/API/console

结尾

如果你喜欢我的内容请关注吧,共同学习共同进步!

感谢浏览~~

带你重拾JavaScript(2)之console的你所不知道的功能的更多相关文章

  1. js值----你所不知道的JavaScript系列(6)

    1.数组 在 JavaScript 中,数组可以容纳任何类型的值,可以是字符串.数字.对象(object),甚至是其他数组(多维数组就是通过这种方式来实现的) .----<你所不知道的JavaS ...

  2. 你所不知道的库存超限做法 服务器一般达到多少qps比较好[转] JAVA格物致知基础篇:你所不知道的返回码 深入了解EntityFramework Core 2.1延迟加载(Lazy Loading) EntityFramework 6.x和EntityFramework Core关系映射中导航属性必须是public? 藏在正则表达式里的陷阱 两道面试题,带你解析Java类加载机制

    你所不知道的库存超限做法 在互联网企业中,限购的做法,多种多样,有的别出心裁,有的因循守旧,但是种种做法皆想达到的目的,无外乎几种,商品卖的完,系统抗的住,库存不超限.虽然短短数语,却有着说不完,道不 ...

  3. JavaScript中你所不知道的Object(二)--Function篇

    上一篇(JavaScript中你所不知道的Object(一))说到,Object对象有大量的内部属性,而其中多数和外部属性的操作有关.最后留了个悬念,就是Boolean.Date.Number.Str ...

  4. 闭包----你所不知道的JavaScript系列(4)

    一.闭包是什么? · 闭包就是可以使得函数外部的对象能够获取函数内部的信息. · 闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. · 闭包就 ...

  5. js类型----你所不知道的JavaScript系列(5)

    ECMAScirpt 变量有两种不同的数据类型:基本类型,引用类型.也有其他的叫法,比如原始类型和对象类型等. 1.内置类型 JavaScript 有七种内置类型: • 空值(null) • 未定义( ...

  6. 【javascript杂谈】你所不知道的replace函数

    前言 最近在做面试题的时候总会用到这个函数,这个函数总是和正则表达式联系到一起,并且效果很是不错,总能很简单出色的完成字符串的实际问题,大家肯定都会使用这个函数,像我一样的初学者可能对这个函数的了解还 ...

  7. 重拾javascript动态客户端网页脚本

    笔记一: 一.DOM 作用: ·              DOM(Doument Object Model) 1.document文档 HTML 文件 (标记语言) <html> < ...

  8. 提升----你所不知道的JavaScript系列(3)

    很多编程语言在执行的时候都是自上而下执行,但实际上这种想法在JavaScript中并不完全正确, 有一种特殊情况会导致这个假设是错误的.来看看下面的代码, a = 2; var a; console. ...

  9. 你所不知道的JavaScript数组

    相信每一个 javascript 学习者,都会去了解 JS 的各种基本数据类型,数组就是数据的组合,这是一个很基本也十分简单的概念,他的内容没多少,学好它也不是件难事情.但是本文着重要介绍的并不是我们 ...

随机推荐

  1. MySQL的SELECT ...for update

    最近的项目中,因为涉及到Mysql数据中乐观锁和悲观锁的使用,所以结合项目和网上的知识点对乐观锁和悲观锁的知识进行总结. 悲观锁介绍 悲观锁是对数据被的修改持悲观态度(认为数据在被修改的时候一定会存在 ...

  2. java内存模型6-final

    与前面介绍的锁和volatile相比较,对final域的读和写更像是普通的变量访问.对于final域,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个final域的写入,与随后把这个被构造对象 ...

  3. DNA比对算法:BWT

    DNA比对算法:BWT BWT算法,实质上是前缀树的一种实现.那么什么是前缀树呢? 一.前缀树 对于问题p in S?如果S=rpq,那么p为S前缀rp的一个后缀. 于是,为了判断p in S 是否成 ...

  4. EF Core 2.0 新特性

    前言 目前 EF Core 的最新版本为 2.0.0-priview1-final,所以本篇文章主要是针对此版本的一些说明. 注意:如果你要在Visual Studio 中使用 .NET Core 2 ...

  5. .Net Core中使用ref和Span<T>提高程序性能

    一.前言 其实说到ref,很多同学对它已经有所了解,ref是C# 7.0的一个语言特性,它为开发人员提供了返回本地变量引用和值引用的机制. Span也是建立在ref语法基础上的一个复杂的数据类型,在文 ...

  6. JBoss7 如何用脚本 启动 和 停止

    用脚本来启动/停止JBoss服务器,有助于开发部署的 自动执行,提高工作效率. 在JBoss以前的版本中,很容易在bin目录下面找到 启动和停止服务器的脚本: run.bat shutdown.bat ...

  7. 003---hibernate主要接口介绍

    Hibernate可以访问JNDI.JDBC.JTA JNDI(Java名称和目录接口):主要管理我们对象,特别是EJB应用,它会把所有EJB应用加入到JNDI这棵树上,Tomcat连接池也是把对象注 ...

  8. ATmega8仿真——外部中断的学习

    前面我们学习了ATmega8的I/O口作为通用数字输入/输出口来用时对LED数码管控制和扫描按键的应用: 但ATmega8多数的I/O口都是复用口,除了作为通用数字I/O使用,还有其第二功能,这里我们 ...

  9. 做一枚精致的程序猿,Fighting!

    这几天我和我们的团队正在做一个公司管理系统的项目,团队分工根据成员的水平高低来分工,这样看似公平,但其实不公平,如此这样一来,那些水平稍不如别人的成员就没有发展的机会?那么问题来了,对于水平稍逊色的程 ...

  10. zookeeper源码分析-server-util

    zxid (ZooKeeper Transaction Id,每次请求对应一个唯一的zxid,如果zxid a < zxid b ,则可以保证a一定发生在b之前) zookeeper采用了递增的 ...