Node.js——util工具模块
util工具模块1、util模块概述2、util模块的使用2.1、格式化输出字符串2.2、将对象转换为字符串调试2.3、实现对象间的原型继承2.4、转换异步函数的风格2.5、判断是否为指定类型的内置对象2.6、其它方法1、util模块概述util模块是Node.js的内置模块它提供了常用方法的集合这主要是为了弥补核心JavaScript功能过于精简的不足该模块的主要目的是满足Node.js内部API的需求。引用util模块的语法格式如下constutilrequire(util)util模块的常用方法和功能util.format()字符串格式化util.inspect()将任意对象转换为字符串对象深度查看调试神器util.promisify()将 Node.js 回调风格函数 转为 Promiseutil.callbackify()Promise → 回调util.types精准类型判断util.deprecate()标记废弃方法util.inherits()用于实现原型继承已不推荐util.isDeepStrictEqual(a, b)深度严格比较替代 assert.deepStrictEqualutil.getSystemErrorName(errno)获取系统错误名2、util模块的使用2.1、格式化输出字符串util模块提供了format()方法用来对字符串进行格式化其语法格式如下util.format(format,[...])参数format是包含零个或多个占位符的字符串每个占位符都是以一个%字符开始并最终被对应的参数转换的字符串值取代。format方法支持的占位符有以下类型。%s指定字符串。%d指定数值。%i转换为整数。%f转换为小数。%j转换为JSON字符串。%o转换为具有通用JavaScript对象格式的字符串表示形式与util.inspect()类似它显示了完整的对象以及不可枚举的属性。%O与%o相似但没有选项它不包含不可枚举的属性。%%输出%。返回值格式化后的字符串。constutilrequire(util)classPerson{constructor(name,age){this.namename;this.ageage;}showName(){returnthis.name;}}letmannewPerson(老张,60);console.log(util.format(%d%d%d,50,70,5070))console.log(util.format(字符串%s,man.showName()));console.log(util.format(整数%i,26.01))console.log(util.format(小数%f,26.01))console.log(util.format(百分数%d%%,26))console.log(util.format(对象格式化为JSON%j,man))5070120 字符串老张 整数26 小数26.01 百分数26% 对象格式化为JSON{name:老张,age:60}2.2、将对象转换为字符串调试util模块提供了一个inspect()方法用于将任意对象转换为字符串该方法通常用于调试和错误输出其语法格式如下util.inspect(object[,showHidden[,depth[,colors]]])depth展开层级null表示无限colors启用颜色showHidden显示不可枚举属性其中参数object是必需的参数用来指定一个对象参数showHidden为true时将会显示更多的关于object对象的隐藏信息参数depth表示最大递归层数用于对象比较复杂时指定对象的递归层数参数colors的值若为true表示输出格式将会以ANSI颜色编码通常用于在终端上显示更漂亮的效果。constutilrequire(util)classPerson{constructor(name,age){this.namename;this.ageage;}showName(){returnthis.name;}}letmannewPerson(老张,60);console.log(util.inspect(man));console.log(util.inspect(man,true));Person { name: 老张, age: 60 } Person { name: 老张, age: 60 }2.3、实现对象间的原型继承util模块提供了一个inherits()方法用于实现对象间的原型继承其语法格式如下util.inherits(constructor,superConstructor)参数constructor表示要从原型继承的任何对象参数superConstructor表示要继承的原型对象。varutilrequire(util);functionpar(){this.name老张;this.age60;this.sayfunction(){console.log(this.name今年this.age岁);};}par.prototype.showNamefunction(){console.log(我是this.name);};functionch(){this.name小张;}util.inherits(ch,par);varobjBasenewpar();objBase.showName();objBase.say();console.log(objBase);varobjSubnewch();objSub.showName();console.log(objSub);我是老张 老张今年60岁 par{name:老张,age:60,say:[Function(anonymous)]}我是小张 ch{name:小张}通过上面的结果可以看出ch仅继承了par在原型中定义的函数而构造函数内部的age属性、say函数都没有被继承这一点大家使用时要注意。2.4、转换异步函数的风格util模块中的callbackify()方法可以将async异步函数或者一个返回值为Promise的函数转换成遵循错误优先回调风格的函数其语法格式如下util.callbackify(async_function)参数async_function表示原始的async异步函数该方法的返回值是一个以错误优先回调风格返回的Promise函数基本形式为(err,ret){}第一个参数是错误原因。例如定义一个异步函数fn使用util模块的callbackify()对其进行风格转换然后执行转换风格后的异步函数其中传入一个错误优先风格的回调函数function(err,ret)。代码如下constutilrequire(util);asyncfunctionfn(){return这是一个函数;}constcallbackFunctionutil.callbackify(fn);callbackFunction((err,ret){if(err)throwerr;console.log(ret);});这是一个函数2.5、判断是否为指定类型的内置对象除了上面常用的一些方法util模块中还提供了一个types类型通过调用该类型的一些方法可以为不同类型的内置对象提供类型检查。常用的类型检查方法如下。util.types.isAnyArrayBuffer(value)判断value是否为内置的ArrayBuffer或SharedArrayBuffer实例。constutilrequire(util)console.log(util.types.isAnyArrayBuffer(newArrayBuffer()));console.log(util.types.isAnyArrayBuffer(newSharedArrayBuffer()));true trueutil.types.isArrayBufferView(value)判断value是否为ArrayBuffer视图的实例。constutilrequire(util)console.log(util.types.isArrayBufferView(newInt8Array()));//trueconsole.log(util.types.isArrayBufferView(Buffer.from(你好)));//trueconsole.log(util.types.isArrayBufferView(newArrayBuffer()));//falseutil.types.isArrayBuffer(value)判断value是否为内置的ArrayBuffer实例。constutilrequire(util);console.log(util.types.isArrayBuffer(newArrayBuffer()));//trueconsole.log(util.types.isArrayBuffer(newSharedArrayBuffer()));//falseutil.types.isAsyncFunction(value)判断value是否为异步函数。constutilrequire(util);console.log(util.types.isAsyncFunction(functionfunc(){}));//falseconsole.log(util.types.isAsyncFunction(asyncfunctionfunc(){}));//trueutil.types.isBooleanObject(value)判断value是否为布尔类型。constutilrequire(util)console.log(util.types.isBooleanObject(false));//falseconsole.log(util.types.isBooleanObject(false));//falseconsole.log(util.types.isBooleanObject(newBoolean(false)));//trueconsole.log(util.types.isBooleanObject(newBoolean(true)));//trueconsole.log(util.types.isBooleanObject(Boolean(false)));//falseutil.types.isBoxedPrimitive(value)判断value是否为原始对象如new Boolean()、new String()等。constutilrequire(util)console.log(util.types.isBoxedPrimitive(newBoolean(false)));//trueconsole.log(util.types.isBoxedPrimitive(newString(string)));//trueconsole.log(util.types.isBoxedPrimitive(string));//falseutil.types.isDate(value)判断value是否为Date的实例。constutilrequire(util);console.log(util.types.isDate(newDate()));//trueconsole.log(util.types.isDate(newDate(2023,6,18)));//trueutil.types.isNumberObject(value)判断value是否为Number对象。constutilrequire(util);console.log(util.types.isNumberObject(0));//falseconsole.log(util.types.isNumberObject(newNumber()));//trueconsole.log(util.types.isNumberObject(newNumber(0)));//trueutil.types.isRegExp(value)判断value是否为一个正则表达式。constutilrequire(util);console.log(util.types.isRegExp(/^\w$/));//trueconsole.log(util.types.isRegExp(newRegExp(abc)));//trueutil.types.isStringObject(value)判断value是否为一个String对象。constutilrequire(util);console.log(util.types.isStringObject(string));//falseconsole.log(util.types.isStringObject(newString(string)));//true2.6、其它方法Node.js 回调风格函数 转为 Promiseconstfsrequire(fs);constreadFileAsyncutil.promisify(fs.readFile);asyncfunctionrun(){constdataawaitreadFileAsync(./test.txt,utf8);console.log(data);}run();标记废弃方法functionoldApi(){console.log(old api);}constnewApiutil.deprecate(oldApi,oldApi is deprecated, use newApi instead);newApi();
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2469617.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!