news 2026/8/18 16:17:09

Node.js入门教程(二十九):util 模块

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Node.js入门教程(二十九):util 模块

一、util 模块概述

Node.js 中的util模块是一个核心模块,提供了一系列实用工具函数。这些函数主要用于帮助开发者完成常见的编程任务,如类型检查、继承实现、调试输出等。util模块的设计初衷是弥补 JavaScript 原生功能的不足,为开发者提供更多便利。

要使用util模块,只需在代码中引入它:

const util = require('util');

二、主要功能分类

功能分类说明主要方法
类型检查精确判断数据类型util.types.*
字符串格式化格式化输出util.format(),util.inspect()
回调风格转换回调 ↔ Promise 互转util.promisify(),util.callbackify()
继承工具原型继承util.inherits()
调试工具调试输出util.debuglog(),util.inspect()
废弃标记标记过时函数util.deprecate()

三、类型检查工具

util.types提供了一系列精确的类型检查方法,比typeofinstanceof更加可靠。

const util = require('util'); // ArrayBuffer 检查 const arrBuffer = new ArrayBuffer(8); console.log(util.types.isArrayBuffer(arrBuffer)); // true console.log(util.types.isArrayBuffer([])); // false // Date 检查 console.log(util.types.isDate(new Date())); // true console.log(util.types.isDate('2023-01-01')); // false

常用类型检查方法

方法描述
util.types.isArrayBuffer(value)检查是否为 ArrayBuffer
util.types.isAsyncFunction(value)检查是否为异步函数
util.types.isDate(value)检查是否为 Date
util.types.isMap(value)检查是否为 Map
util.types.isSet(value)检查是否为 Set
util.types.isRegExp(value)检查是否为正则表达式
util.types.isPromise(value)检查是否为 Promise
util.types.isTypedArray(value)检查是否为 TypedArray

四、实用工具函数

util.format() - 字符串格式化

类似于 C 语言中的printf函数,用于格式化字符串。

const util = require('util'); const name = 'John'; const age = 30; console.log(util.format('My name is %s and I am %d years old', name, age)); // 输出: My name is John and I am 30 years old // 支持多种占位符 console.log(util.format('%s - %d - %j', 'string', 123, { key: 'value' })); // 输出: string - 123 - {"key":"value"}

util.inspect() - 对象检查

返回对象的字符串表示,主要用于调试。可以配置深度、颜色等选项。

const util = require('util'); const obj = { name: 'Alice', details: { age: 25, hobbies: ['reading', 'coding'] } }; console.log(util.inspect(obj, { depth: 2, colors: true }));

util.inspect 常用选项

选项说明
depth递归深度(null表示无限)
colors是否使用颜色输出
showHidden是否显示不可枚举属性
compact是否压缩输出

五、回调风格转换

util.promisify() - 回调转 Promise

将遵循 Node.js 回调风格的函数转换为返回 Promise 的函数。

const util = require('util'); const fs = require('fs'); // 将回调风格的 fs.readFile 转换为返回 Promise 的函数 const readFile = util.promisify(fs.readFile); async function readConfig() { try { const data = await readFile('config.json', 'utf8'); console.log(data); } catch (err) { console.error('Error reading file:', err); } } readConfig();

util.callbackify() - Promise 转回调

promisify相反,将返回 Promise 的函数转换为回调风格的函数。

const util = require('util'); async function asyncFunc() { return 'Hello World'; } const callbackFunc = util.callbackify(asyncFunc); callbackFunc((err, result) => { if (err) throw err; console.log(result); // Hello World });

六、继承工具

util.inherits() - 原型继承

实现原型继承(ES5 风格)。

注意:在 ES6 中,建议使用classextends关键字代替。

const util = require('util'); function Animal(name) { this.name = name; } Animal.prototype.speak = function() { console.log(this.name + ' makes a noise.'); }; function Dog(name) { Animal.call(this, name); } util.inherits(Dog, Animal); Dog.prototype.speak = function() { console.log(this.name + ' barks.'); }; const d = new Dog('Rex'); d.speak(); // Rex barks.

七、废弃标记

util.deprecate() - 标记废弃函数

包装函数,使其被调用时发出弃用警告。

const util = require('util'); const oldFunction = util.deprecate( () => { console.log('This function is deprecated'); }, 'oldFunction is deprecated. Use newFunction instead.' ); oldFunction(); // 输出: This function is deprecated // (Node.js 会显示弃用警告)

八、实际应用场景

1. 调试复杂对象

当需要打印复杂对象的结构时,util.inspect比简单的console.log更强大:

const util = require('util'); const complexObj = { date: new Date(), regex: /test/g, nested: { array: [1, 2, 3], fn: function() {} } }; console.log(util.inspect(complexObj, { showHidden: true, depth: null, colors: true }));

2. 现代化旧代码

将回调风格的旧代码转换为 Promise 风格:

const util = require('util'); // 旧的回调风格代码 function oldStyleFunc(param, callback) { setTimeout(() => { callback(null, `Result for ${param}`); }, 100); } // 转换为 Promise 风格 const newStyleFunc = util.promisify(oldStyleFunc); async function useNewStyle() { const result = await newStyleFunc('test'); console.log(result); // Result for test } useNewStyle();

3. 自定义对象检查

可以自定义对象的inspect方法,改变util.inspect的输出:

const util = require('util'); class CustomObject { constructor(value) { this.value = value; } [util.inspect.custom](depth, options) { return `CustomObject: ${this.value}`; } } const obj = new CustomObject('test'); console.log(util.inspect(obj)); // CustomObject: test

九、方法完整列表

方法描述版本
util.callbackify(original)Promise 转回调风格函数8.2.0
util.debuglog(section)条件调试日志0.11.3
util.deprecate(fn, msg[, code])标记废弃函数0.8.0
util.format(format[, ...args])格式化字符串0.5.3
util.formatWithOptions(inspectOptions, format[, ...args])带选项的格式化10.0.0
util.getSystemErrorName(err)获取系统错误名称9.7.0
util.inherits(constructor, superConstructor)原型继承0.3.0
util.inspect(object[, options])对象字符串表示0.3.0
util.isDeepStrictEqual(val1, val2)深度严格相等比较9.0.0
util.promisify(original)回调转 Promise8.0.0
util.stripVTControlCharacters(str)剥离 ANSI 转义码16.11.0
util.parseArgs([config])命令行参数解析18.3.0
util.types类型检查工具对象10.0.0

十、注意事项

注意事项说明
性能考虑util.inspect对于大型对象可能有性能影响,生产环境需谨慎使用
API 稳定性某些 API 可能仍被标记为实验性功能
现代替代方案util.inherits在现代 JavaScript 中可用class/extends替代
错误处理使用promisify时需正确处理错误,避免未捕获的 Promise 拒绝

十一、本章小结

知识点说明
util 模块Node.js 内置实用工具模块
类型检查util.types.*提供精确的类型判断
字符串格式化util.format()util.inspect()
回调风格转换util.promisify()util.callbackify()
继承工具util.inherits()(ES6 后推荐class/extends
废弃标记util.deprecate()标记过时函数
调试工具util.inspect()可自定义对象输出

提示util.promisify是日常开发中最常用的方法,它让你能够将大量基于回调的 Node.js 核心模块函数转换为返回 Promise 的函数,从而与async/await完美配合。掌握util模块的使用,可以让你的 Node.js 开发更加得心应手,特别是在调试和代码转换方面。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/18 16:16:30

Duo Navigation Drawer API 速查手册:核心方法与接口一网打尽

Duo Navigation Drawer API 速查手册:核心方法与接口一网打尽 【免费下载链接】duo-navigation-drawer A flexible, easy to use, unique drawer library for your Android project. 项目地址: https://gitcode.com/gh_mirrors/du/duo-navigation-drawer Duo…

作者头像 李华
网站建设 2026/8/18 16:16:28

VBrowser-Android是什么?一款全网视频嗅探缓存APP的完整入门指南

VBrowser-Android是什么?一款全网视频嗅探缓存APP的完整入门指南 【免费下载链接】VBrowser-Android 全网视频嗅探缓存APP 项目地址: https://gitcode.com/gh_mirrors/vb/VBrowser-Android VBrowser-Android 是一款开源的全网视频嗅探缓存APP,它的…

作者头像 李华
网站建设 2026/8/18 16:14:33

基于Python的旅游攻略分享平台系统网站(源代码+文档+PPT+调试+讲解)

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

作者头像 李华