模式切换
util 工具模块
util 工具模块
util 模块概述
util
模块是 Node.js 提供的一个实用工具库,包含了很多常用的函数,可以帮助开发者简化一些常见的编程任务。它提供了许多功能,如格式化字符串、转换对象、继承、处理回调等。util
模块是 Node.js 标准库的一部分,因此无需安装,可以直接使用。
可以通过以下方式引入 util
模块:
javascript
const util = require('util');
util 模块的使用
以下是 util
模块中的一些常用功能。
格式化输出字符串
util.format()
方法可以用来格式化字符串,类似于 printf
风格的格式化方法。它可以将多个参数按指定格式组合成一个字符串。
用法:
javascriptconst util = require('util'); const formattedString = util.format('Hello, %s!', 'world'); console.log(formattedString); // 输出:Hello, world! // 支持多个参数 const age = 25; const name = 'John'; const info = util.format('%s is %d years old.', name, age); console.log(info); // 输出:John is 25 years old.
格式化符号:
%s
: 字符串%d
: 整数%j
: JSON 字符串化(如对象)
将对象转换为字符串
util.inspect()
方法可以将对象转化为一个字符串,便于打印和调试。它是一个非常强大的方法,支持查看对象的内部结构,尤其适用于查看复杂的对象。
用法:
javascriptconst util = require('util'); const obj = { name: 'John', age: 25, sayHello: function() { return 'Hello!'; } }; // 将对象转为字符串 const objStr = util.inspect(obj); console.log(objStr); // 输出:{ name: 'John', age: 25, sayHello: [Function: sayHello] } // 可选参数,控制输出的深度等 const detailedObjStr = util.inspect(obj, { showHidden: true, depth: 2 }); console.log(detailedObjStr);
常用选项:
showHidden
: 是否显示对象的不可枚举属性(默认为false
)。depth
: 控制打印深度(默认2
,null
表示无限制)。colors
: 是否使用颜色标记(true
会开启,false
会关闭)。
实现对象间的原型继承
util.inherits()
方法可以用于实现原型继承,即使子类继承父类的属性和方法。这个方法在实现基于原型的继承时非常有用,尤其是对于自定义的构造函数和类。
用法:
javascriptconst util = require('util'); function Animal(name) { this.name = name; } Animal.prototype.sayHello = function() { console.log(`${this.name} says hello!`); }; function Dog(name, breed) { Animal.call(this, name); // 调用父类构造函数 this.breed = breed; } util.inherits(Dog, Animal); // Dog 继承 Animal const dog = new Dog('Max', 'Golden Retriever'); dog.sayHello(); // 输出:Max says hello! console.log(dog.breed); // 输出:Golden Retriever
通过 util.inherits()
,我们可以让 Dog
类继承 Animal
类的所有方法和属性。
转换异步函数的风格
util.promisify()
方法可以将遵循传统回调风格的异步函数转换为返回 Promise 的形式。这对于现代 JavaScript 中使用 async/await
语法非常有用。
用法:
假设我们有一个传统的异步函数,使用回调处理结果:
javascriptconst fs = require('fs'); // 异步读取文件 fs.readFile('example.txt', 'utf8', function(err, data) { if (err) throw err; console.log(data); });
使用
util.promisify()
将其转换为返回 Promise 的异步函数:javascriptconst util = require('util'); const fs = require('fs'); const readFilePromise = util.promisify(fs.readFile); // 使用 async/await 进行异步操作 async function readFile() { try { const data = await readFilePromise('example.txt', 'utf8'); console.log(data); } catch (err) { console.error(err); } } readFile();
这样,传统的回调函数就变成了 Promise 风格,使得异步操作的错误处理和代码的可读性都得到了改善。
判断是否为指定类型的内置对象
util.isType()
方法用于判断一个对象是否为指定类型的内置对象。常用的判断方法包括 util.isArray()
, util.isDate()
, util.isRegExp()
等。
用法:
javascriptconst util = require('util'); console.log(util.isArray([])); // 输出:true console.log(util.isDate(new Date())); // 输出:true console.log(util.isRegExp(/abc/)); // 输出:true console.log(util.isError(new Error('Something went wrong'))); // 输出:true
以下是
util
模块中常见的类型检查方法:util.isArray()
util.isDate()
util.isError()
util.isFunction()
util.isRegExp()
util.isObject()
等。