Node.js入门教程(二十四):常用工具(util 模块)
一、util 模块概述util模块是 Node.js 的一个内置模块包含了实用工具函数用于支持 JavaScript 编程中的调试、错误处理、格式化等功能。util提供常用函数的集合用于弥补核心 JavaScript 的功能过于精简的不足。util模块中的功能涵盖了从对象检查、继承到格式化字符串等多个方面。二、导入 util 模块const util require(util);三、常用方法概览方法描述util.format(format, ...args)字符串格式化支持%s、%d、%j占位符util.inspect(object[, options])将对象转换为字符串用于调试util.promisify(function)将回调风格的函数转换为返回 Promise 的函数util.callbackify(fn)将返回 Promise 的函数转换为回调风格函数util.inherits(constructor, superConstructor)让一个构造函数继承另一个构造函数的原型方法util.deprecate(fn, message)标记函数为废弃调用时会打印警告消息util.types包含多种类型检测方法的集合util.isDeepStrictEqual(val1, val2)判断两个值是否深度相等util.getSystemErrorName(err)根据错误码返回系统错误名称四、常用方法详解util.format() - 字符串格式化util.format()用于生成格式化字符串支持占位符如%s、%d和%j分别代表字符串、数字和 JSON。const util require(util); const name Alice; const age 25; console.log(util.format(Name: %s, Age: %d, name, age)); // 输出: Name: Alice, Age: 25 console.log(util.format(JSON: %j, { key: value })); // 输出: JSON: {key:value}util.promisify() - 转换回调函数为 Promiseutil.promisify()将传统回调风格的函数转换为返回 Promise 的函数从而可以与async/await一起使用。const util require(util); const fs require(fs); // 将回调风格的 fs.readFile 转换为返回 Promise 的函数 const readFileAsync util.promisify(fs.readFile); (async () { try { const data await readFileAsync(example.txt, utf8); console.log(data); } catch (err) { console.error(err); } })();util.callbackify() - 将 Promise 转换为回调util.callbackify()将返回 Promise 的函数转换为回调风格的函数便于在需要回调的代码环境中使用。util.callbackify(original)将async异步函数或者一个返回值为 Promise 的函数转换成遵循异常优先的回调风格的函数即将(err, value) ...回调作为最后一个参数。在回调函数中第一个参数为拒绝的原因如果 Promise 解决则为null第二个参数则是解决的值。const util require(util); async function fn() { return hello world; } const callbackFunction util.callbackify(fn); callbackFunction((err, ret) { if (err) throw err; console.log(ret); });输出结果hello world注意回调函数是异步执行的并且有异常堆栈错误追踪。如果回调函数抛出一个异常进程会触发一个uncaughtException异常如果没有被捕获进程将会退出。特殊处理如果回调函数的首个参数为 Promise 拒绝的原因且带有返回值且值可以转换成布尔值false这个值会被封装在Error对象里可以通过属性reason获取。function fn() { return Promise.reject(null); } const callbackFunction util.callbackify(fn); callbackFunction((err, ret) { // 当 Promise 被以 null 拒绝时它被包装为 Error 并且原始值存储在 reason 中 err err.hasOwnProperty(reason) err.reason null; // true });util.deprecate() - 标记函数为废弃util.deprecate()用于标记不推荐使用的函数调用时会显示警告信息。const util require(util); const oldFunction util.deprecate(() { console.log(This function is deprecated); }, oldFunction is deprecated. Use newFunction instead.); oldFunction(); // 调用时会显示警告util.inherits() - 实现继承util.inherits(constructor, superConstructor)是一个实现对象间原型继承的函数。JavaScript 的面向对象特性是基于原型的与常见的基于类的不同。JavaScript 没有提供对象继承的语言级别特性而是通过原型复制来实现的。var util require(util); function Base() { this.name base; this.base 1991; this.sayHello function() { console.log(Hello this.name); }; } Base.prototype.showName function() { console.log(this.name); }; function Sub() { this.name sub; } util.inherits(Sub, Base); var objBase new Base(); objBase.showName(); // base objBase.sayHello(); // Hello base console.log(objBase); // { name: base, base: 1991, sayHello: [Function] } var objSub new Sub(); objSub.showName(); // sub console.log(objSub); // { name: sub }运行结果base Hello base { name: base, base: 1991, sayHello: [Function] } sub { name: sub }注意Sub仅仅继承了Base在原型中定义的函数如showName而构造函数内部创建的base属性和sayHello函数都没有被Sub继承。如果去掉objSub.sayHello();这行的注释将会看到错误TypeError: Object #Sub has no method sayHello提示在 ES6 出现之前util.inherits是 Node.js 中实现继承的主要方法。但是ES6 之后推荐使用class和extends语法这样继承的代码更具可读性。util.inspect() - 打印对象结构util.inspect(object[, options])将对象转换为字符串表示形式便于调试。可以指定options参数来控制输出格式。const util require(util); const obj { a: 1, b: 2, c: { d: 3 } }; console.log(util.inspect(obj, { showHidden: false, depth: null, colors: true }));五、util.types 类型检测方法util.types是一个包含许多类型检测方法的集合扩展了 JavaScript 的typeof和instanceof。const util require(util); console.log(util.types.isDate(new Date())); // true console.log(util.types.isMap(new Map())); // true console.log(util.types.isSet(new Set())); // true console.log(util.types.isRegExp(/test/)); // true console.log(util.types.isAsyncFunction(async () {})); // true常用类型检测方法方法描述util.types.isAnyArrayBuffer(value)检查是否为 ArrayBuffer 或 SharedArrayBufferutil.types.isArrayBuffer(value)检查是否为 ArrayBufferutil.types.isAsyncFunction(value)检查是否为异步函数util.types.isBigInt64Array(value)检查是否为 BigInt64Arrayutil.types.isBigUint64Array(value)检查是否为 BigUint64Arrayutil.types.isBooleanObject(value)检查是否为布尔对象util.types.isDataView(value)检查是否为 DataViewutil.types.isDate(value)检查是否为 Dateutil.types.isGeneratorFunction(value)检查是否为生成器函数util.types.isMap(value)检查是否为 Maputil.types.isSet(value)检查是否为 Setutil.types.isRegExp(value)检查是否为正则表达式util.types.isSymbolObject(value)检查是否为符号对象六、旧版工具方法已废弃以下方法在较新版本的 Node.js 中已废弃了解即可。util.isArray(object)如果给定的参数 object 是一个数组返回true否则返回false。var util require(util); util.isArray([]); // true util.isArray(new Array()); // true util.isArray({}); // falseutil.isRegExp(object)如果给定的参数 object 是一个正则表达式返回true否则返回false。util.isRegExp(/some regexp/); // true util.isRegExp(new RegExp(another regexp)); // true util.isRegExp({}); // falseutil.isDate(object)如果给定的参数 object 是一个日期返回true否则返回false。util.isDate(new Date()); // true util.isDate(Date()); // false (without new returns a String) util.isDate({}); // false七、本章小结方法用途util.format()格式化字符串util.inspect()将对象转为可读字符串用于调试util.promisify()将回调函数转为 Promise推荐util.callbackify()将 Promise 转为回调函数util.inherits()实现原型继承ES6 后推荐用class/extendsutil.deprecate()标记废弃函数util.types增强的类型检测工具集提示util.promisify是日常开发中最常用的方法它让你能够将大量基于回调的 Node.js 核心模块函数转换为返回 Promise 的函数从而与async/await完美配合。在新代码中推荐使用class和extends语法替代util.inherits。

相关新闻

零知派ESP32--通过I2C 接口扩展芯片PCF8575使用矩阵键盘控制LED

零知派ESP32--通过I2C 接口扩展芯片PCF8575使用矩阵键盘控制LED

项目概述 本项目以 ESP32 为主控,通过 I2C 接口扩展芯片 PCF8575,将有限的主控引脚扩展为 16 路数字 I/O,并在其上挂载: 模块作用44 矩阵键盘人机输入,控制灯效与工作模式2 路高电平 LED状态指示 / 感应联动照明RGB …

2026/8/15 23:08:39 阅读更多 →
构建Codex Harness:驾驭AI代码生成,实现工程化与自动化测试

构建Codex Harness:驾驭AI代码生成,实现工程化与自动化测试

最近在推进一个大型项目的代码生成与自动化测试框架时,团队反复在代码一致性、测试覆盖率和工程规范落地这几个环节上卡壳。零散的脚本和工具链难以形成闭环,导致开发效率提升有限。本文将围绕“Codex Harness”这一工程化实践的核心概念,系统…

2026/8/15 23:08:39 阅读更多 →
AI如何成为调试伙伴:从日志分析到嵌入式开发的脑力延伸实践

AI如何成为调试伙伴:从日志分析到嵌入式开发的脑力延伸实践

1. 从工具到伙伴:重新定义调试中的AI角色最近和几个搞嵌入式、后端和算法的朋友聊天,发现一个挺有意思的现象:大家一提到用AI辅助调试,第一反应要么是“让AI帮我写个bug定位脚本”,要么是“把报错信息丢给ChatGPT让它给…

2026/8/15 23:08:39 阅读更多 →

最新新闻

CesiumJS中集成Shadertoy流体模拟:自定义Primitive与DrawCommand实战

CesiumJS中集成Shadertoy流体模拟:自定义Primitive与DrawCommand实战

在三维地理信息可视化领域,CesiumJS 以其强大的三维地球渲染能力而闻名。然而,其核心定位是地理空间数据的展示,对于高度动态、基于物理的流体模拟这类特效,原生支持相对有限。将 Shadertoy 上那些令人惊艳的流体模拟效果集成到 C…

2026/8/15 23:59:54 阅读更多 →
Video2X视频超分辨率实战:一键把老旧视频提升到4K画质

Video2X视频超分辨率实战:一键把老旧视频提升到4K画质

Video2X视频超分辨率实战:一键把老旧视频提升到4K画质 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/video…

2026/8/15 23:59:54 阅读更多 →
炉石传说玩得心累?HsMod 插件实战手册,帮你把等待和重复操作砍掉一大半

炉石传说玩得心累?HsMod 插件实战手册,帮你把等待和重复操作砍掉一大半

炉石传说玩得心累?HsMod 插件实战手册,帮你把等待和重复操作砍掉一大半 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod 花十几秒等动画转完、机械地一包一包开卡、被…

2026/8/15 23:59:54 阅读更多 →
C++ 数据结构 AVL树(附动图超详细)

C++ 数据结构 AVL树(附动图超详细)

一、前言:AVL树,又称为平衡二叉树,它基于二叉搜索树并通过平衡而得到。在前面的学习中我们提到,二叉搜索树可以提高搜索数据的效率,但在数据有序的情况下会退化为单支树,此时在树中查找元素就得遍历一整个分…

2026/8/15 23:59:54 阅读更多 →
工业传感器与变送器详解:序章 从物理世界到工业数据

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/15 23:59:54 阅读更多 →
边缘计算与AI、能源、航天的协同进化:从概念到硬核产业实践

边缘计算与AI、能源、航天的协同进化:从概念到硬核产业实践

1. 项目概述:当边缘计算遇上“硬核”产业最近几年,边缘计算这个词在科技圈里热度不减,但说实话,很多讨论都停留在“雾计算”、“靠近数据源”这些概念层面,或者局限在安防摄像头、智能家居这些消费级场景里打转。作为一…

2026/8/15 23:58:54 阅读更多 →

日新闻

周新闻

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/14 13:40:53 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/14 14:06:45 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/15 2:35:29 阅读更多 →