Node.js 中 `\b` 的作用

console.log 打印数字时,我们经常会有这样追求美的需求。

想让数字样式区别于其他文字,让其更突出,比如下方的 42,

生命、宇宙以及一切的终极答案是什么? 42

最简单的方式是利用 Node.js 或浏览器对数字会输出有别于字符串的颜色来做到。

ts 复制代码
console.log(
  "生命、宇宙以及一切的终极答案是什么?",
  42,
)

Node.js 将渲染黄色,浏览器蓝色。

但如果我们要给整句话加上感叹号。就会变成:

ts 复制代码
console.log(
  "生命、宇宙以及一切的终极答案是什么?",
  42,
  '!'
)

输出:

数字和感叹号出现了我们不需要的空格!如果用模板字符串,则数字颜色就变成和字符串一样了,这不是我们想要的。

这里可以用到 \b。即 back 让光标回退一格。

ts 复制代码
console.log(
  "生命、宇宙以及一切的终极答案是什么?",
  42,
  '\b!'
)

打印后烦扰的空格消失,完美符合我们的要求:

再举一个例子。关于序号高亮的例子:

我们想打印如下两句话:

markdown 复制代码
1. 生命、宇宙以及一切的终极答案是什么? 42
2. HTTP 状态码"未找到"是? 404

想让序号 1 和 2 高亮,同样可用到 \b:

ts 复制代码
console.log(
  1, "\b. 生命、宇宙以及一切的终极答案是什么?",
  42,
)

console.log(
  2, "\b. HTTP 状态码"未找到"是?",
  404,
)

输出:

如果不用 \b,也是可以实现的,只是代码更多。

就是利用 bash shell color code 着色,三种方案 1 直接用底层 shell code(最轻量级,需要自己封装颜色方法,否则可读性太难看)2 chalk 包。

在 Node.js v20.12.0 后,我们有了新选择:node:util 提供了 util.styleText(format, text[, options])。再也无需对一个小小的着色需求引入 chalk 这个笨重的包。

ts 复制代码
import { styleText } from "node:util"

console.log(
  `${styleText('yellow', '1')}. 生命、宇宙以及一切的终极答案是什么?${styleText('yellow', '42')}`,
)

console.log(
  `${styleText('yellow', '2')}. HTTP 状态码"未找到"是?${styleText('yellow', '404')}`,
)

好处更灵活更可定制化,想要什么颜色都行。

总结

\b 让光标左移,就如同可删除前一个字符,让后一个字符紧接着出现,可以解决某些看似棘手的小问题。

当然不限于 Node.js 任何语言只要在终端输出都可以使用 \b,常见用途还有输出进度条。

相关推荐
只睡四小时2 小时前
MCP 弃用 SSE?Node 分帧漏 81.7% 事件
node.js·webassembly·实时通信·mcp·streamable http
hey you~13 小时前
个体户门店办理400电话,如何对接订单系统实现来电弹窗
node.js·webhook·400电话·门店数字化·来电弹窗·订单系统对接
YIAN2 天前
RAG 学到最后,我真正学会的不是“检索”,而是让系统知道自己缺什么
langchain·node.js·llm
用户11977079480732 天前
GitHub 电商开源项目分享:用 sharp 批量出饰品主图,试了裁剪、细节图和色彩配置文件三个坑
前端·node.js
donecoding2 天前
pnpm 配好了,为什么执行的还是另一份?命令入口与运行时排查
node.js·前端工程化
江屿风2 天前
【Plain Language Large Model】【从浏览器到全栈:一课精通Node.js三剑客】流食般投喂
笔记·前端框架·npm·node.js·js·npx
SomeOtherTime2 天前
node.js基础(AI回答)
node.js
雨季mo浅忆3 天前
记录Node.js安全漏洞及其内置Brotli解码器问题
node.js·安全性测试
tommyjiatong3 天前
资安底座连环雷:从 PHP2Shell 到 Node2Shell
node.js·php
SEO_juper3 天前
Bash 交叉验证 robots.txt 和 sitemap:两个文件自相矛盾,页面永远收录不了
开发语言·python·node.js·json·bash