如何理解node.js中Util模块作用
导读:本文共4256.5字符,通常情况下阅读需要14分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 从类型判断说起在 JavaScript 中,进行变量的类型校验是一个非常令人头疼的事,如果只是简单的使用typeof会到各种各样的问题。举几个简单的:console.log(typeofnull)//'object'console.log(typeofnewArray)//'object'console.log(typeofn... ...
目录
(为您整理了一些要点),点击可以直达。在 JavaScript 中,进行变量的类型校验是一个非常令人头疼的事,如果只是简单的使用typeof
会到各种各样的问题。
举几个简单的:
后来,大家发现可以使用Object.prototype.toString()
方法来进行变量类型的判断。
对toString()
方法进行代理,可以得到一个类型字符串,我们就可以在这个字符串上面搞事情。
But,在 Node.js 中,内部其实是有一组用来判断变量类型的 api 的。而且功能异常丰富,除了基础类型的判断,还支持判断 Promise 对象、Date 对象、各种ArrayBuffer。
在 JavaScript 中,对象、数组等变量在判断相等的过程中,如果用===
通常只会判断这两个变量是否指向同一内存地址。如果想判断对象的键对应的所有值是否相等,需要对两个对象进行遍历。在util
中,也提供了一个方法可以用来判断两个对象是否严格相等:util.isDeepStrictEqual(val1, val2)
该方法同样可以用来判断数组,是否严格相等:
早期的 Node API 都是Error First
风格的,也就是所有的异步函数都会接受一个回调函数,该回调的一个参数为 error 对象,如果正常返回 error 对象为null
,后面的参数为成功响应的结果。
在 Node 8 发布的时候,新增了一个promisify
接口,用于将Error First
风格的 API 转为 Promise API。
不过,后来也有很多人觉得这些原生 API 支持 Promise 的方式太过繁琐,每个 API 都需要单独的包装一层promisify
方法。在 Node 10 发布的时候,原生模块都新增了一个.promises
属性,该属性下的所有 API 都 Promise 风格的。
注意:Node 14 后,promises
API 又新增了一种引入方式,通过修改包名的方式引入。
除了将Error First
风格的 API 转为 Promise API,util
中还提供callbackify
方法,用于将async
函数转换为Error First
风格的函数。
下面通过callbackify
将 promise 化的fs
还原为Error First
风格的函数。
如果有开发过 Node 服务,应该都用过debug
模块,通过该模块可以在控制台看到更加明晰的调试信息。
其实,通过util.debug
也能实现类似的效果:
只是在启动时,需要将DEBUG
环境变量替换为NODE_DEBUG
。
如果你有认真看上面的代码,应该会发现,在log('当前用户: %o', user)
方法前面的字符串中,有一个%o
占位符,表示这个地方将会填充一个对象(object)。这与 C 语言或 python 中的,printf
类似。同样,在util
模块中,直接提供了格式化的方法:util.format
。
除了%o
占位符,不同的数据类型应使用不同的占位符。
JavaScript 中的对象是一个很复杂的东西,除了直接使用util.format
外加%o
占位符的方式格式化对象,util
中还提供了一个叫做inspect
方法来进行对象格式化。
这么看inspect
好像什么都没做,但是inspect
方法还有第二个参数,用来进行格式化时的一些个性化配置。
depth: number
:控制显示层级;
sorted: boolean|Function
: 是否按照key的编码值进行排序;
compact: boolean
:是否进行单行显示;
当然上面只是一部分配置,更详细的配置可查阅 node 文档,下面我们写几个案例:
所有的属性都换行显示:
只格式化对象第一层的值:
按照key值的编码倒序输出:
如何理解node.js中Util模块作用的详细内容,希望对您有所帮助,信息来源于网络。