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。

相关新闻

最新新闻

什么是代理记账?拆解代理记账公司的服务流程与数据链路

什么是代理记账?拆解代理记账公司的服务流程与数据链路

代理记账是把企业的会计核算、记账、报税等财务工作,委托给持有《代理记账许可证书》的机构处理(依据《会计法》第三十六条、《代理记账管理办法》财政部令第98号)。其服务本质是一条标准化的财务数据流水线:票据采集→凭证生成→…

2026/8/16 7:18:57
基于PHP的零食超市管理系统的设计与实现(源码+讲解视频+LW)

基于PHP的零食超市管理系统的设计与实现(源码+讲解视频+LW)

联系博主 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 …

2026/8/16 7:18:57
解决Ubuntu apt-get update报错:软件源配置与网络排查指南

解决Ubuntu apt-get update报错:软件源配置与网络排查指南

1. 问题现场:一个典型的“源”错误剖析今天想和大家聊聊一个在Linux,特别是Ubuntu及其衍生系统(比如树莓派的Raspbian、各种Docker镜像)里,几乎每个用户都会踩到的“入门级”大坑:sudo apt-get update报错。…

2026/8/16 7:18:57
免费高质量图片素材网站全解析:从版权风险到实战搜索技巧

免费高质量图片素材网站全解析:从版权风险到实战搜索技巧

1. 从“免费”到“高质量”:图片素材网站的真相与选择作为一个常年和图片打交道的创作者,无论是写博客、做PPT、设计海报还是运营社交媒体,我太清楚找一张“免费”且“高质量”图片有多难了。新手朋友常常会兴奋地分享一个“免费图片网站大全…

2026/8/16 7:18:57
AIGC知识库问答系统在技术面试中的优化实践

AIGC知识库问答系统在技术面试中的优化实践

1. 面试场景中的技术博弈本质去年帮朋友公司面试后端开发时遇到一个典型案例:候选人简历写着"精通MyBatis",却在回答动态SQL实现方式时支支吾吾。这种场景在技术面试中屡见不鲜,表面看是候选人准备不足,深层反映的却是知…

2026/8/16 7:18:57
东莞壁挂炉维修|过保故障专业处理|各区驻点师傅快速上门|欧米到家持证规范服务

东莞壁挂炉维修|过保故障专业处理|各区驻点师傅快速上门|欧米到家持证规范服务

【24小时报修热线:400-996-9791】欧米到家是东莞本地具备全套合规资质的壁挂炉专业维修服务商,全城分区驻点,专注家用、商用壁挂炉过保故障维修、深度除垢清洗、原厂配件更换、采暖系统调试、移机检修一站式服务。东莞冬季温和湿润&#xff0…

2026/8/16 7:13:57