Chrome 调试工具技巧:自定义格式转换器

Custom Formatters 自定义转换器

在大多数的情况下 DevTools 的 console 默认的对象的转化的方式都很有用,但是有时候你期望与众不同。默认的方式总是很 "默认" - 所以我们自定义自己输出对象的方式。做这个事情的函数被称为 Custom Formatter 在我们写下一个之前,需要在 DevTools 的设置 (在 DevTools 的 ⋮ 下拉框找到设置,或者按下 F1) 中把对应的设置打开:

所以,这样的 formatter 应该长什么样?它是一个最多有三个方法的对象:

  • header --- 处理如何展示在 console 的日志中的主要部分。
  • hasbody --- 如果你想显示一个用来展开对象的 ▶ 箭头,返回 true
  • body - 定义将会被显示在展开部分的内容中。

让我们一起来看一个基础的 自定义 formatter

我移除了循环的结构的错误处理,让它看起来更加简洁

header 方法返回了一个 JsonML (译者注:JsonML: JSON Markup Language JSON 标记语言) 数组,由这些组成:

  • 标签名
  • 属性对象
  • 内容 (文本值或者其他元素)

(如果这个看起来很眼熟的话,那可能是因为你之前写过一些 React 代码 :D)

在输出的时候,这个简单的 formatter 对于每层嵌套,直接以 7 个空格的缩进打印这个对象。所以现在我们的输出看起来是这样:

自定义格式化转换器的应用实践

现在有好几种 custom formatter 供你使用,例如:你可以在这个 immutable-devtools 仓库中找到对于 Immutable.js 结构的完美展示。但是同样可以自己造一个。

一般来说,每当遇到一些(结构)不寻常的对象的时候,或者大量的日志 (最好避免这样的情况,但是有时候很有用) 并且想从中做区分的时候,你可以采用一个 custom formatter 来处理。

很实用的一个窍门:直接将你不关心,不需要特别对待的对象过滤出来,这种情况,直接在 header 方法里面 return null 。让 DevTools 使用默认的转换方式来处理这些值。

【第3007期】通过调试技术,理清了视频播放很快的原理

好了,撇开实用性,同样可以在它上面找点乐子 - 这是一个关于 console 方法的蠢萌例子:它叫 console.clown () 并且它转换要打印的对象,在对象前面加上一个 emoji 表情 ... 可能是为了更好的显示效果吧,我猜 😁

源码在这里为了方便大家尝试,源码贴在下面:

javascript 复制代码
 window.devtoolsFormatters = [{
     header: function(obj){
       if (!obj.__clown) {
         return null;
       }
       delete obj.__clown;
       const style = `
         color: red;
         border: dotted 2px gray;
         border-radius: 4px;
         padding: 5px;
       `
       const content = `🤡 ${JSON.stringify(obj, null, 2)}`;

       try {
         return ['div', {style}, content]
       } catch (err) { // for circular structures
         return null;  // use the default formatter
       }
     },
     hasBody: function(){
         return false;
     }
 }]

 console.clown = function (obj) {
   console.log({...obj, __clown: true});
 }

 console.log({message: 'hello!'});   // normal log
 console.clown({message: 'hello!'}); // a silly log

如你所见,我正使用 console.clown 方法来给打印的对象添加一个特殊的属性,所以我可以将它区分出来并且在 formatter (转换器) 中对它进行区别对待,但在大部分现实的案例中,可以这样:比如检查这个对象是不是某一个特殊类的实例等等。

相关推荐
崔庆才丨静觅2 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60613 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了3 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅3 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅3 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅4 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment4 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅4 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊4 小时前
jwt介绍
前端
爱敲代码的小鱼4 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax