AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

巧用控制台,提升 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:512014
用户头像
王文婧 InfoQ编辑

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

关注

评论

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

数字化转型框架如何搭建?

优秀

数字化转型

玩转服务器之Docker篇:10分钟学会搭建 Docker 环境

京东科技开发者

云计算 容器 Docker 镜像 企业号 4 月 PK 榜

轻松玩转小程序,这样做让你拥有2亿用户

加入高科技仿生人

小程序 低代码 小程序制作 小程序开发

矢量图片转换工具:Vector Magic 免激活版

真大的脸盆

Mac Mac 软件 图片格式转换 图片格式

微服务 Spring Boot 整合Redis 实战开发解决高并发数据缓存

Bug终结者

redis缓存 三周年连更

电子元器件“切开后”,原来是这样子的!

元器件秋姐

科普 三极管 元器件 二极管 电感

常用测试策略与测试手段

测吧(北京)科技有限公司

测试发开

重新学习Java线程原语

码语者

Java 线程

企业级无代码平台,「重塑」软件生产关系

ToB行业头条

从 Dev 和 Ops 视角出发,聊聊 DevSecOps 的 What / Why / How

极狐GitLab

DevOps 安全 DevSecOps 安全左移 安全合规

使用depay信用卡开通chatGPT付费API

石云升

AI ChatGPT 三周年连更

熬夜肝到秃头!阿里顶配级Spring Security笔记

程序知音

Java spring 后端 spring security java架构

中国边缘云公有云服务市场 Top2,百度智能云让智算无处不在

百度开发者中心

云计算 #百度智能云# 边缘云

今晚直播 | 思码逸陆春蕊:面对研发效能度量落地难点,如何让数据说话?

思码逸研发效能

研发效能

华为阅读发布最新进展,月活用户超1亿,大力发展精品阅读

最新动态

聊聊 CSS 隐藏元素的 10 种实用方法

茶无味的一天

CSS 隐藏元素

小技巧:如何让 Windows 应用程序在 Parallels Desktop 中启动得更快

互联网搬砖工作者

Backgrounds——为所有人准备的mac动态壁纸,让桌面更生动

互联网搬砖工作者

户外led电子屏未来发展趋势

Dylan

技术 LED显示屏 户外LED显示屏

Gartner发布中国容器管理平台供应商识别指南,灵雀云实力入选

York

容器 云原生 系统架构 研究报告 平台选型

如何在页面中监听“不存在”的 DOM 节点

茶无味的一天

JavaScript DOM web api 水印 MutationObserver

详解数据结构中栈的定义和操作

华为云开发者联盟

数据结构 开发 华为云 华为云开发者联盟 企业号 4 月 PK 榜

带你掌握数仓的作业级监控TopSQL

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

《一时重构一时爽,一直重构一直爽》

后台技术汇

代码重构 软件重构 三周年连更

白盒的测试方法

测吧(北京)科技有限公司

测试

“亮相”欧洲!TDengine 在 KubeCon 与开发者探讨云原生与数据库的技术结合

TDengine

tdengine 时序数据库 KubeCON

瓴羊quickbi工具免费体验30天,零基础上手企业数据更直观

对不起该用户已成仙‖

OpenHarmony开发者大会举办,OpenHarmony项目群授牌30家捐赠单位及个人

最新动态

MySQL进阶之道,MySql性能实战源码+笔记+项目实战

程序知音

Java MySQL 数据库 后端

如何从1到99做好产品 | 得物技术

得物技术

深度学习基础入门篇[六]:模型调优,学习率设置(Warm Up、loss自适应衰减等),batch size调优技巧,基于方差放缩初始化方法。

汀丶人工智能

人工智能 深度学习 学习率 warmup batchsize

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