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. JAVA自增自减的玄机

    先看下面代码: ; i = i++; System.out.println(i); 请问:输出结果为多少? ---------------------------------------------- ...

  2. sbt结合IDEA对Spark进行断点调试开发

    笔者出于工作及学习的目的,经常与Spark源码打交道,也难免对Spark源码做修改及测试.本人一向讲究借助工具提升效率,开发Spark过程中也在摸索如何更加顺畅的对源码进行调试. Spark基于Sca ...

  3. 关于Java解压文件的一些坑及经验分享(MALFORMED异常)

    文章也已经同步到我的csdn博客: http://blog.csdn.net/u012881584/article/details/72615481 关于Java解压文件的一些坑及经验分享 就在本周, ...

  4. Spring-bean作用域scope详解

    Spring Framework支持五种作用域(其中有三种只能用在基于web的Spring ApplicationContext). singleton 在每个Spring IoC容器中一个bean定 ...

  5. (HTTPS)web 项目如何实现https

    HTTPS实际是SSL over HTTP, 该协议通过SSL在发送方把原始数据进行加密,在接收方解密,因此,所传送的数据不容易被网络黑客截获和破解.本文介绍HTTPS的三种实现方法.方法一 静态超链 ...

  6. Oracle CDC简介及异步在线日志CDC部署示例

    摘要 最近由于工作需要,花时间研究了一下Oracle CDC功能和LogMiner工具,希望能找到一种稳定.高效的技术来实现Oracle增量数据抽取功能.以下是个人的部分学习总结和部署实践. 1. O ...

  7. Vue单页式应用(Hash模式下)实现微信分享

    前端微信分享的基本步骤: 一.绑定域名: 先登录微信公众平台进入"公众号设置"的"功能设置"里填写"JS接口安全域名".这个不多说,微信开发 ...

  8. Xamarin开发笔记—百度在线语音合成

    语音合成:也被称为文本转换技术(TTS),它是将计算机自己产生的.或外部输入的文字信息转变为可以听得懂的.流利的口语输出的技术. 技术选型:语音合成初步选择有两个,一是讯飞.二是百度. 因为使用的是X ...

  9. docker疑难解答 -- 设置远程服务监听

    环境: ubuntu 16.04 tls docker version 17.05.0-ce ========================= 今天想要搭建一个多主机的集成docker环境,但是我最 ...

  10. TCP慢启动,拥塞控制,ECN 笔记

    TCP慢启动,拥塞控制,ECN 笔记 1,TCP慢启动 TCP在连接过程的三次握手完成后,开始传数据,并不是一开始向网络通道中发送大量的数据包,这样很容易导致网络中路由器缓存空间耗尽,从而发生拥塞:而 ...