javascript的一些笔记

JavaScript 早期没有 C 语言 printf 那种占位符格式化,拼字符串要靠 + 或模板字符串,做「两位数分钟、前导零」这类输出时略显啰嗦。Node 和小项目里可以用 sprintf-js,用法接近 sprintf,记一笔方便以后翻。

js类似于printf那样的格式化字符串

场景: 倒计时或时间表,希望输出 23:3023:00 这种固定宽度,分钟个位数要补零。

安装包

npm install sprintf-js

调用包

var sprintf = require('sprintf-js').sprintf,

注意 CommonJS 写法;若在 ES Module 里用,改成 import { sprintf } from 'sprintf-js' 即可。

操作实例:时间前补零操作

for (let i = 46; i >= 0; i--) {
        console.log(sprintf('%2d:%02d', i / 2, (i % 2 ? 0 : 30)))
      }

%2d 表示整数至少两位宽度;%02d 表示两位且不足补零。循环里用 i 推导「小时的一半」和「整点或半点」,打印出来就是一串递减的时间点。

和 padStart 的对比: 现在 ES2017 也有 String.prototype.padStart,只做「个位数补零」时可以直接 `${n}`.padStart(2, '0'),不必引库。但格式串一次写清 %f%s、宽度对齐时,sprintf 仍然顺手——比如日志行里混排字符串和数字,一行格式搞定。Node 老项目、脚本工具里保留 sprintf-js 很常见;浏览器端如果在意包体积,优先原生模板字符串或 padStart。按项目依赖和团队习惯二选一就好。记这篇主要是怕下次写倒计时又忘 %02d%2d 的差别。

版权声明: 本文首发于 指尖魔法屋-javascript的一些笔记https://blog.thinkmoon.cn/post/247-notes-javascript-nodejs/) 转载或引用必须申明原指尖魔法屋来源及源地址!