写点什么

巧用控制台,提升 JavaScript 调试性能

  • 2019-11-06
  • 本文字数:2204 字

    阅读完需:约 7 分钟

巧用控制台,提升JavaScript调试性能

调试 JavaScript 代码的最简单途径就是简单地通过 console.log 方法输出结果。虽然它能用,但这并不是最理想的处理方式。如果有更好的方法,何不探索一番呢?



“来自控制台的 Hello”


console 对象提供对浏览器调试控制台的访问。仅当在浏览器上运行 JavaScript 代码(即客户端代码而非服务端代码)时,才可以使用 console 对象。不同浏览器的工作方式各不相同,但是通常都会提供一组常规功能。调试语句最棒的一点是它们兼容所有库和框架,因为它们是在核心语言中编写的。


console.log 的最基本使用场景是显示代码的输出。考虑以下代码:


function sayHello(name) {  console.log(name)}
sayHello('Indrek')
复制代码


它记录传递给 sayHello 函数的名称。



“输出传递给函数的名称”


如果我们想知道必须调用 sayHello 函数多少次,该怎么办?有一个简单的方法,称为 console.count()。

console.count

count()会输出使用该标签调用它的次数。如果没有参数,则 count()的行为就像使用默认标签调用一样。


function sayHello(name) {  console.count()  console.log(name)}
sayHello("Indrek")sayHello("William")sayHello("Kelly")
复制代码


上面的代码记录以下内容:



统计我们调用 sayHello 函数的次数


这样可以统计出调用函数的次数,但如果要统计调用相同名称函数的次数怎么办?一种方法是简单地将 name 参数传递给 count 方法。


function sayHello(name) {  console.count(name)}
sayHello("Indrek")sayHello("William")sayHello("Kelly")sayHello("Indrek")
复制代码


搞定!该函数跟踪我们用每个名称调用这个函数的次数。



统计我们说每个名字的次数

console.warn

以下方法将警告消息输出到控制台,在使用开发人员工具或 API 时非常有用。console.warn 是一种理想选择,用来让用户知道某些事情不对劲,例如省略参数或让开发人员知道 API/软件包版本已过时。


function sayHello(name) {  if(!name) {    console.warn("No name given")  }}
sayHello()
复制代码


上面的代码检查 name 参数是否传递给函数。如果未输入任何名称,则会记录一条警告消息,提示其考虑某些事项。



未传递名称时,向用户显示警告消息。

console.table

如果我们要处理数组或对象,则在显示数据时 console.table 很有用。数组中的每个元素将是表中的一行。以下面的示例为例,其中有一系列水果组成的数组。如果将 fruits 数组传递给 console.table 方法,则应该看到一个打印到控制台的表。


const fruits = ["kiwi", "banana", "strawberry"]
console.table(fruits)
复制代码


而且如果我们看一眼控制台,应该看到一个描述数组的表。



以表格形式显示数组


你可以想象一下,当我们处理具有数百个(甚至数千个)值的更大数组,这种方法会非常有用。这里有一个例子来说明问题,其中数组有更多的值。


const fruits = [  "Apple",  "Watermelon",  "Orange",  "Pear",  "Cherry",  "Strawberry",  "Nectarine",  "Grape",  "Mango",  "Blueberry",  "Pomegranate",  "Carambola",  "Plum",  "Banana",  "Raspberry",  "Mandarin",  "Jackfruit",  "Papaya",  "Kiwi",  "Pineapple",  "Lime",  "Lemon",  "Apricot",  "Grapefruit",  "Melon",  "Coconut",  "Avocado",  "Peach"];
console.table(fruits);
复制代码


而且如果我们用数组调用 console.table,我们应该看到下表。



在表格中显示所有水果


使用数组很简单。如果我们要处理的是对象呢?


const pets = {  name: "Simon",  type: "cat"};
console.table(pets);
复制代码


注意,现在我们有了一个对象而不是一个数组。该对象拥有两个键:宠物的 name 和 type。



该表没有像之前那样注销值,而是显示值以及键和值。如果我们还有一个对象并尝试将其列出,该怎么办?


const pets = {  name: "Simon",  type: "cat"};
const person = { firstName: "Indrek", lastName: "Lasn"}
console.table(pets, person);
复制代码


不出所料,两个单独的对象显示在两个不同的表中。



两个对象


如果我们想将它们配对在一个表中,则将对象包装在数组中。


const pets = {  name: "Simon",  type: "cat"};
const person = { firstName: "Indrek", lastName: "Lasn"}
console.table([pets, person]);
复制代码


现在我们将对象分组到一个表中。



通过将对象包装在数组中进行分组

console.group

在使用集合或链接数据时,请使用嵌套组来直观地关联相关消息,从而让输出井井有条。要创建一个新的嵌套块,请调用 console.group()。


console.log("This is the first level");console.group();console.log("Level 2");console.group();console.log("Level 3");console.warn("More of level 3");console.groupEnd();console.log("Back to level 2");console.groupEnd();console.log("Back to the first level");
复制代码


以下代码显示嵌套的块级控制台语句——在处理基于关系的数据时很有用。



console.groupCollapsed()方法也差不多,但是新块是折叠的,需要单击显示按钮才能读取它。

概要

请使用语言自身提供的所有工具,能用就用。简单提一下:由于 debugger 本身就值得单独一篇文章来探讨,因此我们暂时跳过了它的内容。


如果你对 debugger 感到好奇,请参阅这篇文章


如果你刚入门 JavaScript,想要学习这种语言,我建议你先阅读相关书籍,同时结合实际的构建来学习。先看一下“更聪明的JavaScript学习方式”一书,这里还列出了一些用来构建的有趣应用程序


感谢阅读。


原文链接


https://medium.com/better-programming/boost-your-javascript-debugging-skills-with-these-console-tricks-ab984c70298a


2019-11-06 16:511940
用户头像
王文婧 InfoQ编辑

发布了 126 篇内容, 共 72.6 次阅读, 收获喜欢 275 次。

关注

评论

发布
暂无评论
发现更多内容

工业传感器:工业互联网的第一道门

工业互联网

最近线上发生的两个坑爹锅

艾小仙

后端

GrowingIO Design 组件库搭建之开发工具

GrowingIO技术专栏

设计 大前端

高频量化交易机器人系统开发|高频量化交易机器人APP软件开发

系统开发

顶级!13位专家力荐Spring5为企业级开发提供一站式方案

996小迁

Java spring 编程 架构 面试

WebRTC ICE 状态与提名处理

阿里云视频云

阿里云 WebRTC 通信 流媒体开发 流媒体传输

架构师训练营第二周作业 - 命题作业

阿德儿

2020DevOps状态报告——变更管理

禅道项目管理

DevOps 运维 开发 趋势 自动化测试

如何对AD和Exchange进行安全加固满足护网需要?

嘉为蓝鲸

安全 asm AD 邮件系统 权限

阿里P8内部架构核心学习知识笔记在各大互联网上流传,限时开放下载

Java架构之路

Java 程序员 架构 面试 编程语言

Java 程序经验小结:用私有构造器或者枚举类型强化Singleton属性

后台技术汇

28天写作

安卓开发在线!字节跳动Android研发岗这些知识点内部泄露出来了,已拿到offer

欢喜学安卓

android 程序员 面试 移动开发

研发管理101军规#003 实战规模化敏捷:从8人到百人的敏捷之路

爱吃小舅的鱼

程序人生 Scrum 敏捷开发

林昊获中国计算机学会杰出工程师奖,阿里中间件再获高度肯定,“三位一体”推动技术普惠

阿里巴巴云原生

阿里巴巴 阿里云 开发者 云原生 中间件

低代码开发平台的技术路线

Sam678678

备战2O2I新年资料

ios 面试

从美国《拜杜法案》到中国供应链体系形成的内在逻辑

JiangX

供应链 28天写作 制造

重学JS | 异步编程 Generator()

梁龙先森

面试 大前端 编程语言 28天写作

阿里中间件团队技术官手撸笔记,全新演绎“Kafka部署实战”,已开源

Java架构之路

Java 程序员 架构 面试 编程语言

快速入门案例实战:电商网站商品管理(一)

escray

elasticsearch elastic 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

普通人必须掌握的五个必学理财知识

v16629866266

跨越全场景统一架构三大挑战,MindSpore亮出“四招”

华为云开发者联盟

深度学习 联邦学习 mindspore 算子 ai框架

盘点2020 | 人生是一场马拉松-OBKoro1的2020年年终总结

OBKoro1

2020 大前端 年终总结 OBKoro1

新思科技静态应用安全测试解决方案获得Forrester Wave认可

InfoQ_434670063458

新思科技 Forrester Wave 静态应用安全测试

快抛弃你错误的坚持

石君

生活随想 28天写作

新鲜出炉!阿里内部开源SpringCloud Alibaba全解(全彩版)全网首发

Java架构追梦

Java 学习 架构 面试 SpringCloud Alibaba

我以为自己够牛逼了,直到看到了Alibaba专家的面试笔记,我学习了三个月,却入职京东,税前36K

Java架构之路

Java 程序员 架构 面试 编程语言

electron实战练习-三个文件实现一个命令行终端

OBKoro1

node.js Electron electron实战 命令行终端 electron学习

mysql字符串字段索引优化

瞌睡的李先生

MySQL 索引

软件测试--selenium安装使用

测试人生路

软件测试

细节决定成败!致Android高级工程师的一封信,实战解析

欢喜学安卓

android 程序员 面试 移动开发

巧用控制台,提升JavaScript调试性能_大前端_Indrek Lasn_InfoQ精选文章