模式切换
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()等。
