在调试 JS 代码时,很多人倾向于使用 alert() 或者 console.log() 方法来输出信息,正如某些 Java 程序员喜欢在调试代码时使用System.out.println() 输出信息一样。但与 Java 输出不一样的是, console 对象拥有多种方法可以更好的呈现信息,从而给代码调试带来方便。根据常用程度,列出以下几种 console 对象的方法:

  • console.log()

  • console.debug()、console.info()、console.warn() 与 console.error()

  • console.table()

  • console.time() 与 console.timeEnd()

  • console.assert()

  • console.count()

  • console.group、console.groupEnd() 与 console.groupCollapsed()

  • console.dir()

以下示例的运行环境是 Chrome 53。

console.log()

先来谈谈我们最熟悉也最常用的 console.log() 方法。

我们最常用的做法是通过它来输出一个变量或者输出一个字符串。比如下面:

console.log("Hello China!");
const str = "Hello world!";
console.log(str);

运行结果如下:

Hello China!
Hello world!

但我们也可以这样用 console.log() :

// 代码段 1
const str1 = "hello";
const str2 = "world";
console.log(str1, str2);// 代码段 2
console.log("%d年%d月%d日", 2015, 09, 22);

控制台会输出:

hello world
2015年9月22日

代码片段 1 显示,console.log() 的参数可以有多个,输出的结果以一个空格隔开。

代码片段 2 显示,console.log() 可以使用 C 语言 printf() 风格的占位符,不过其支持的占位符种类较少,只支持字符串(%s)、整数(%d或%i)、浮点数(%f)和对象(%o)。

console.debug()、console.info()、 console.warn() 与 console.error()

这四个方法的使用方法跟 console.log() 一模一样,差别在于输出的颜色与图标不同。下面是示例:

console.log("log");
console.debug("debug");
console.info("info");
console.warn("warn");
console.error("error");

运行结果如下:

console.table()

我们看下面一个变量:

const people = {"person1": {"fname": "san", "lname": "zhang"}, "person2": {"fname": "si", "lname": "li"}, "person3": {"fname": "wu", "lname": "wang"}
};

我们用 console.log() 将之在 Chrome 的控制台中输出:

再用 console.table() 输出:

所以从上面两种输出我们可以看出,当输出类似于这种两层嵌套的对象时,我们可以选择 console.table() 以表格的形式输出。当然,嵌套三层及以上的也会以表格形式输出,但限于表格只能显示二维信息的特点,其会在嵌套三层或以上的地方会显示 "Object" 字符串。

console.time() 与 console.timeEnd()

在调试时,我们经常需要知道一段代码执行时间,我们可以使用这两行代码来实现。看下面一段代码:

console.time("for-test");
const arr = [];
for(let i = 0; i < 100000; i++) {arr.push({"key": i});
}
console.timeEnd("for-test");

输出为:

for-test: 16.030ms  // Chrome 这优化做的,版本 43 中的时间是:176.152ms

从上面的例子可以看出,我们用 console.time() 和 console.timeEnd() 包围要测试运行时间的代码,这两个方法的参数保持一致,以便正确识别和匹配代码开始和结束的位置。

console.assert()

console.assert() 类似于单元测试中的断言,当表达式为 false 时,输出错误信息。示例如下:

const arr = [1, 2, 3];
console.assert(arr.length === 4);

输出结果如下:

console.count()

调试代码时,我们经常需要知道一段代码被执行了多少次,我们可以使用 console.count() 来方便的达到我们的目的。示例如下:

function func() {console.count("label");
}for(let i = 0; i < 3; i++) {func();
}

运行结果为:

label: 1
label: 2
label: 3

console.group()、 console.groupEnd() 与 console.groupCollapsed()

一般的 console.log() 方法的输出没有层级关系,在需要一些显示层级关系的输出中显得苍白无力,使用 console.group() 可以达到我们的目的。示例代码如下:

console.group("1");
console.log("1-1");
console.log("1-2");
console.log("1-3");
console.groupEnd();
console.group("2");
console.log("2-1");
console.log("2-2");
console.log("2-3");
console.groupEnd();

运行结果为:

把 "group" 换成 "groupCollapsed",则默认为折叠运行结果。

console.dir()

console.dir() 是干嘛的?MDN 上说这个方法是为了将特定的 JS 对象显示为可以交互的列表,而列表是折叠起来的。这么说有点抽象,看我在 Chrome 控制台输出的效果:

从上图可以看到,用 console.dir() 输出的结果是完全折叠的,所以大家能够理解我为什么不会用 console.dir() 方法了。然后我又用 Firefox 测试了一下:

怪不得有小伙伴喜欢用这个方法,原来在 Firefox 的控制台中,console.dir() 能够将一个折叠的对象显示为一个清晰的导航树。

再看一个对比:

写到这里可以说,如果在 Chrome 环境下进行开发,如果输出一般的对象,推荐使用 console.log(),而在 Firefox 环境下,想要清晰地显示一个对象,console.dir() 还是比较推荐的。

对于 Chrome 用户来讲,console.dir() 是不是就没用了呢?然而并不是:

在 Chrome 中打印 DOM 元素时,两个方法输出的结果大不一样。console.log() 会将 DOM 元素以 HTML 的形式输出,而 console.dir() 则会以 JSON 对象的形式输出。

Java工程师该如何编写高效代码?相关推荐

  1. java高效代码_Java工程师该如何编写高效代码?

    在调试 JS 代码时,很多人倾向于使用 alert() 或者 console.log() 方法来输出信息,正如某些 Java 程序员喜欢在调试代码时使用System.out.println() 输出信 ...

  2. Java编码技巧之高效代码50例

    来自:高德技术 导读:世界上只有两种物质:高效率和低效率:世界上只有两种人:高效率的人和低效率的人.--萧伯纳 同理,世界上只有两种代码:高效代码和低效代码:世界上只有两种人:编写高效代码的人和编写低 ...

  3. 编写高效的Android代码

    编写高效的Android代码 转自:http://www.chinaup.org/docs/toolbox/performance.html 介绍 对于如何判断一个系统的不合理,这里有两个基本的原则: ...

  4. 转:编写高效的Android代码

    毫无疑问,基于Android平台的设备一定是嵌入式设备.现代的手持设备不仅仅是一部电话那么简单,它还是一个小型的手持电脑,但是,即使是最快的最高端的手持设备也远远比不上一个中等性能的桌面机. 这就是为 ...

  5. java代码中添加事务_C#和JAVA中编写事务代码

    C#  DAL层代码,执行多条增删改,使用事务操作: /// /// 执行 多条增删改 (非查询语句) /// /// /// /// public static int ExcuteNonQuery ...

  6. JVM知识点总览:高级Java工程师面试必备

    作者 | 郑雨迪 出处 | 极客时间<深入拆解 Java 虚拟机> 下面这篇文章汇集了阿里.美团.Oracle 等大厂的 JVM 考点,你是否能回答得上来? 什么是 Java 虚拟机?为什 ...

  7. Java调用C/C++编写的第三方dll动态链接库(zz)

    这里主要用的方法是JNI.在网上查资料时看到很多人说用JNI非常的复杂,不仅要看很多的文档,而且要非常熟悉C/C++编程.恐怕有很多人在看到诸如此类的评论时已经决定绕道用其他方法了.本文将做详细的介绍 ...

  8. 只会java_只会码代码的你和Java工程师之间的差距有大?

    给刚进社会的程序员新生一个建议,想成为一个优秀的程序员,高级程序员,不能眼高手低,不能认为开发新项目,技术研发才学到东西,不能看不起基本功的学习,每一个大牛都是一步步的晋级的,本文介绍如何成为高级Ja ...

  9. 如何编写高效优雅 Java 程序

    文章目录 编写高效优雅 Java 程序 面向对象 01.构造器参数太多怎么办? Builder 模式: 02.不需要实例化的类应该构造器私有 03.不要创建不必要的对象 04.避免使用终结方法 05. ...

最新文章

  1. 小蠓虫如何灭_怎么杀蠓虫
  2. 事关人类生存?为什么要探寻AI系统的可解释性?
  3. Day2_and_Day3 文件操作
  4. Matlab某医院用光电比色计,数理统计答案(研究生).ppt
  5. sony右键延迟的解决方案
  6. (7)css常用属性2
  7. jquery jstree 插件的使用
  8. 栈帧与操作数栈剖析及符号引用与直接引用的转换
  9. 1键将 Python2 代码自动转化为 Python3
  10. 请不要再用那种态度把我搞火了!
  11. Android Mvp架构详解
  12. 反转链表的实现(三种方法)
  13. 论文解读:《EMDLP:RNA甲基化位点预测的合奏多尺度深度学习模型》
  14. 2021届的Java后端应届生面试总结
  15. C语言二级题库(刷题软件+60套真题+填空题+大题)2022年9月份新题第三套
  16. 弹性小球flash导航菜单源码
  17. RESTful API设计简介
  18. [USACO 2010 Feb S]Chocolate Eating
  19. 数据仓库、数据湖、湖仓一体概念
  20. NICO EXCHANGE NICO 交易所系統維護公告

热门文章

  1. Embeded linux之移植iptables
  2. 转载 调用xvid 实现解码
  3. C#数据类型转换—使用Convert类转换
  4. 深入理解C++对象模型-对象的内存布局,vptr,vtable
  5. QT5.14.2基于PCL1.11.1显示点云(基于Windows VS2019开发环境)
  6. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波13 - 平滑低通滤波器 -盒式滤波器核
  7. linux系统下安装qgis,深度操作系统 deepin 15.11安装 QGIS 3.4
  8. Office Word界面和页面字体模糊不清的解决方案
  9. codeforces 1060 A
  10. Flask之flask-session