在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
从类型判断说起在 JavaScript 中,进行变量的类型校验是一个非常令人头疼的事,如果只是简单的使用 举几个简单的: console.log(typeof null) // 'object' console.log(typeof new Array) // 'object' console.log(typeof new String) // 'object' 后来,大家发现可以使用 const getTypeString = obj => Object.prototype.toString.call(obj) getTypeString(null) // '[object Null]' getTypeString('string') //'[object String]' getTypeString(new String) //'[object String]' 对 const getTypeString = obj => { return Object.prototype.toString.call(obj) } const isType = type => { return obj => { return getTypeString(obj) === `[object ${type}]` } } const isArray = isType('Array') // 该方法一般通过 Array.isArray 代替 const isNull = isType('Null') const isObject = isType('Object') const isRegExp = isType('RegExp') const isFunction = isType('Function') const isAsyncFunction = isType('AsyncFunction') isNull(null) // true isObject({}) // true isRegExp(/\w/) // true isFunction(() => {}) // true isAsyncFunction(async () => {}) // true But,在 Node.js 中,内部其实是有一组用来判断变量类型的 api 的。而且功能异常丰富,除了基础类型的判断,还支持判断 Promise 对象、Date 对象、各种ArrayBuffer。 const types = require('util/types') types.isDate(new Date) // true types.isPromise(new Promise(() => {})) // true types.isArrayBuffer(new ArrayBuffer(16)) // true 严格相等在 JavaScript 中,对象、数组等变量在判断相等的过程中,如果用 const util = require('util') const val1 = { name: 'shenfq' } const val2 = { name: 'shenfq' } console.log('val1 === val2', val1 === val2) // false console.log('isDeepStrictEqual', util.isDeepStrictEqual(val1, val2)) // true 该方法同样可以用来判断数组,是否严格相等: const util = require('util') const arr1 = [1, 3, 5] const arr2 = [1, 3, 5] console.log('arr1 === arr2', arr1 === arr2) // false console.log('isDeepStrictEqual', util.isDeepStrictEqual(arr1, arr2)) // true Error First & Promise早期的 Node API 都是 // 下面是一个读取文件的示例 const fs = require('fs') fs.readFile('nginx.log', (error, data) => { if (error) { // 读取文件失败 console.error(error) return } // 读取文件成功,打印结果 console.log(data) }) 在 Node 8 发布的时候,新增了一个 const fs = require('fs') const util = require('util') const readFile = util.promisify(fs.readFile) readFile('./2021-11-11.log', { encoding: 'utf-8' }) .then(text => console.log(text)) .catch(error => console.error(error)) 不过,后来也有很多人觉得这些原生 API 支持 Promise 的方式太过繁琐,每个 API 都需要单独的包装一层 const fs = require('fs').promises fs.readFile('./2021-11-11.log', { encoding: 'utf-8' }) .then(text => console.log(text)) .catch(error => console.error(error)) 注意:Node 14 后, const fs = require('fs/promises') fs.readFile('./2021-11-11.log', { encoding: 'utf-8' }) .then(text => console.log(text)) .catch(error => console.error(error)) 除了将 下面通过 const fs = require('fs/promises') const util = require('util') const readFile = util.callbackify(fs.readFile) readFile('./2021-11-12.log', { encoding: 'utf-8' }, (error, text) => { if (error) { console.error(error) return } console.log(text) }) 调试与输出如果有开发过 Node 服务,应该都用过 const debug = require('debug') const log = debug('app') const user = { name: 'shenfq' } log('当前用户: %o', user) 其实,通过 const debug = require('debug') const log = debug('app') const user = { name: 'shenfq' } log('当前用户: %o', user) 只是在启动时,需要将 如果你有认真看上面的代码,应该会发现,在 const { format } = require('util') console.log( format('当前用户: %o', { name: 'shenfq', age: 25 }) ) 除了
JavaScript 中的对象是一个很复杂的东西,除了直接使用 const { inspect } = require('util') const user = { age: 25, name: 'shenfq', work: { name: 'coding', seniority: 5 } } console.log(inspect(user)) 这么看
当然上面只是一部分配置,更详细的配置可查阅 node 文档,下面我们写几个案例: 所有的属性都换行显示: inspect(user, { compact: false }) 只格式化对象第一层的值: inspect(user, { depth: 0, compact: false }) 按照key值的编码倒序输出: inspect(user, { compact: false, sorted: (a, b) => a < b ? 1 : -1 }) 以上就是node.js中Util模块教程示例详解的详细内容,更多关于node.js中Util模块的资料请关注极客世界其它相关文章! |
请发表评论