Node.js中的常用工具类util
util是一個Node.js核心模塊,提供常用函數(shù)的集合,用于彌補(bǔ)JavaScript的功能的不足,util模塊設(shè)計的主要目的是為了滿足Node內(nèi)部API的需求。其中包括:格式化字符串、對象的序列化、實現(xiàn)對象繼承等常用方法。要使用util模塊中的方法,只需require('util')引入即可。
1. 格式化輸出字符串:util.format(format[, ...])
根據(jù)第一個參數(shù),返回一個格式化字符串,類似printf的格式化輸出。 傳入的第一個參數(shù)是一個字符串,其中包含零個或多個占位符,format方法會將其中的每一個占位符被替換為與其對應(yīng)的值后,輸出結(jié)果。?format方法支持的占位符有:
- %s?- 字符串.
- %d?- 數(shù)字 (整型和浮點型).
- %j?- JSON. 如果這個參數(shù)包含循環(huán)對象的引用,將會被替換成字符串?'[Circular]'。
- %%?- 單獨一個百分號('%')。不會占用一個參數(shù)。
format方法的幾種使用示例:
console.log(util.format('%s:%s', 'foo')); // foo:%s console.log(util.format('%s:%s:%d', 'foo', 'bar', 'baz')); // foo:bar:NaN console.log(util.format(1, 2, 3)); // 1 2 3
2. 在控制臺標(biāo)準(zhǔn)輸出:util.log(string)
printf方法用于在控制臺stdout輸出,輸出帶有時間戳。
util.log('這是一個stout輸出'); //15 Jun 18:28:20 - 這是一個stout輸出
3. 將對象序列化為字符串:util.inspect(object[, options])
inspect方法用于將對象序列化為字符串,這一方法在調(diào)試代碼查看對象結(jié)構(gòu)時非常有用。其可選參數(shù)可選值如下:
-
showHidden?- 是否枚舉顯示對象的隱藏屬性。默認(rèn)為?false
- depth?- 設(shè)置對象枚舉顯示的深度。默認(rèn)為2,設(shè)置為null時將無窮遞歸顯示
- colors?- 如果設(shè)為true,將會以ANSI顏色代碼風(fēng)格進(jìn)行輸出。默認(rèn)為?false
- customInspect?- 如果設(shè)為?false,那么定義在被檢查對象上的inspect(depth, opts) 方法將不會被調(diào)用。 默認(rèn)為true。
例如檢查util對象的所有屬性。代碼如下:
var util = require('util');console.log(util.inspect(util, { showHidden: true, depth: null }));3.1 自定義?util.inspect?顏色
util.inspect屬性用于自定義輸出的顏色和樣式,可以通過util.inspect.styles?和util.inspect.colors?屬性設(shè)置。
util.inspect.colors可定義的顏色有:white,?grey,?black,?blue,?cyan,?green,?magenta,?red?和?yellow。
util.inspect.styles可定義的樣式有:bold,?italic,?underline?和?inverse
3.2 自定義對象的?inspect()?方法
對象可以定義自己的?inspect(depth)方法;當(dāng)使用util.inspect()檢查該對象的時,自定義的inspect(depth)方法將會被執(zhí)行。使用示例如下:
var util = require('util');var obj = { name: 'nate' }; obj.inspect = function(depth) {return '{' + this.name + '}'; };util.inspect(obj);// "{nate}"
4. 檢查對象是否是數(shù)組:util.isArray(object)
isArray()方法用于檢查傳入對象是否是數(shù)據(jù),isArray()方法會首先使用ECMAScript5中的Array.isArray()方法和typeof操作符等進(jìn)行檢查,以確保檢查結(jié)果的正確性。幾種使用示例如下:
var util = require('util');util.isArray([])// true util.isArray(new Array)// true util.isArray({})// false
5. 檢查對象是否是RegExp類型:util.isRegExp(object)
isRegExp方法用于檢查對象是否是RegExp類型,即是否為正則表達(dá)式對象。幾種使用示例如下:
var util = require('util');util.isRegExp(/some regexp/)// true util.isRegExp(new RegExp('another regexp'))// true util.isRegExp({})// false
6. 檢查對象是否是Date類型:util.isDate(object)
isDate方法用于檢查對象是否是RegExp類型,即日期類型。幾種使用示例如下:
var util = require('util');util.isDate(new Date())// true util.isDate(Date())// false (without 'new' returns a String) util.isDate({})// false
7. 檢查對象是否是Error類型: util.isError(object)
isError方法用于檢查對象是否是Error類型。幾種使用示例如下:
var util = require('util');util.isError(new Error())// true util.isError(new TypeError())// true util.isError({ name: 'Error', message: 'an error occurred' })// false
8. 實現(xiàn)對象間原型繼承:util.inherits(constructor, superConstructor)
util.inherits(constructor, superConstructor)是一個實現(xiàn)對象間原型繼承的方法。JavaScript 的面向?qū)ο筇匦允腔谠偷睦^承,與常見的基于類的不同,JavaScript 沒有提供對象繼承的語言級別特性,而是通過原型鏈復(fù)制來實現(xiàn)的。inherits方法可以將父類原型鏈上的方法復(fù)制到子類中,實現(xiàn)原型式繼承。
使用示例,實現(xiàn)一型式繼承:
var util = require("util"); var events = require("events");//MyStream構(gòu)造函數(shù),在構(gòu)造函數(shù)將this指向本對象 function MyStream() {events.EventEmitter.call(this); }//復(fù)制父對象上所有的方法 util.inherits(MyStream, events.EventEmitter);//對MyStream類添加原型方法 MyStream.prototype.write = function(data) {this.emit("data", data); }var stream = new MyStream();//由于MyStream繼承自EventEmitter,所以其實例stream是MyStream類的實例也是EventEmitter類的實例 console.log(stream instanceof events.EventEmitter); // true console.log(MyStream.super_ === events.EventEmitter); // true//父類中的方法調(diào)用 stream.on("data", function(data) {console.log('Received data: "' + data + '"'); }) //子類中的方法調(diào)用 stream.write("It works!"); // Received data: "It works!"
util模塊中還有一些方法如:util.debug(string)、util.puts([...])、util.pump(readableStream, writableStream, [callback])等,但都不是穩(wěn)定版本或已被其它方法替代,不再贅述。
總結(jié)
以上是生活随笔為你收集整理的Node.js中的常用工具类util的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hyperledger Fabric 1
- 下一篇: 一行命令搞定node.js 版本安装、升