小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Node.js中的常用工具類util

 念念爸 2017-01-12

util是一個(gè)Node.js核心模塊,提供常用函數(shù)的集合,用于彌補(bǔ)JavaScript的功能的不足,util模塊設(shè)計(jì)的主要目的是為了滿足Node內(nèi)部API的需求。其中包括:格式化字符串、對(duì)象的序列化、實(shí)現(xiàn)對(duì)象繼承等常用方法。要使用util模塊中的方法,只需require('util')引入即可。

  1. 格式化輸出字符串:util.format(format[, ...])
  2. 在控制臺(tái)標(biāo)準(zhǔn)輸出:util.log(string)
  3. 將對(duì)象序列化為字符串:util.inspect(object[, options])
  4. 檢查對(duì)象是否是數(shù)組:util.isArray(object)
  5. 檢查對(duì)象是否是RegExp類型:util.isRegExp(object)
  6. 檢查對(duì)象是否是Date類型:util.isDate(object)
  7. 檢查對(duì)象是否是Error類型:util.isError(object)
  8. 實(shí)現(xiàn)對(duì)象間原型繼承:util.inherits(constructor, superConstructor)


1. 格式化輸出字符串:util.format(format[, ...])

根據(jù)第一個(gè)參數(shù),返回一個(gè)格式化字符串,類似printf的格式化輸出。 傳入的第一個(gè)參數(shù)是一個(gè)字符串,其中包含零個(gè)或多個(gè)占位符,format方法會(huì)將其中的每一個(gè)占位符被替換為與其對(duì)應(yīng)的值后,輸出結(jié)果。 format方法支持的占位符有:

  • %s - 字符串.
  • %d - 數(shù)字 (整型和浮點(diǎn)型).
  • %j - JSON. 如果這個(gè)參數(shù)包含循環(huán)對(duì)象的引用,將會(huì)被替換成字符串 '[Circular]'。
  • %% - 單獨(dú)一個(gè)百分號(hào)('%')。不會(huì)占用一個(gè)參數(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. 在控制臺(tái)標(biāo)準(zhǔn)輸出:util.log(string)

printf方法用于在控制臺(tái)stdout輸出,輸出帶有時(shí)間戳。

util.log('這是一個(gè)stout輸出');			//15 Jun 18:28:20 - 這是一個(gè)stout輸出


3. 將對(duì)象序列化為字符串:util.inspect(object[, options])

inspect方法用于將對(duì)象序列化為字符串,這一方法在調(diào)試代碼查看對(duì)象結(jié)構(gòu)時(shí)非常有用。其可選參數(shù)可選值如下:

  • showHidden - 是否枚舉顯示對(duì)象的隱藏屬性。默認(rèn)為 false

  • depth - 設(shè)置對(duì)象枚舉顯示的深度。默認(rèn)為2,設(shè)置為null時(shí)將無窮遞歸顯示


  • colors - 如果設(shè)為true,將會(huì)以ANSI顏色代碼風(fēng)格進(jìn)行輸出。默認(rèn)為 false


  • customInspect - 如果設(shè)為 false,那么定義在被檢查對(duì)象上的inspect(depth, opts) 方法將不會(huì)被調(diào)用。 默認(rèn)為true。

例如檢查util對(duì)象的所有屬性。代碼如下:

var util = require('util');

console.log(util.inspect(util, { showHidden: true, depth: null }));

3.1 自定義 util.inspect 顏色

util.inspect屬性用于自定義輸出的顏色和樣式,可以通過util.inspect.stylesutil.inspect.colors 屬性設(shè)置。

util.inspect.colors可定義的顏色有:white, grey, black, blue, cyan, green, magenta, redyellow

util.inspect.styles可定義的樣式有:bold, italic, underlineinverse

3.2 自定義對(duì)象的 inspect() 方法

對(duì)象可以定義自己的 inspect(depth)方法;當(dāng)使用util.inspect()檢查該對(duì)象的時(shí),自定義的inspect(depth)方法將會(huì)被執(zhí)行。使用示例如下:

var util = require('util');

var obj = { name: 'nate' };
obj.inspect = function(depth) {
  return '{' + this.name + '}';
};

util.inspect(obj);
  // "{nate}"


4. 檢查對(duì)象是否是數(shù)組:util.isArray(object)

isArray()方法用于檢查傳入對(duì)象是否是數(shù)據(jù),isArray()方法會(huì)首先使用ECMAScript5中的Array.isArray()方法和typeof操作符等進(jìn)行檢查,以確保檢查結(jié)果的正確性。幾種使用示例如下:

var util = require('util');

util.isArray([])
  // true
util.isArray(new Array)
  // true
util.isArray({})
  // false


5. 檢查對(duì)象是否是RegExp類型:util.isRegExp(object)

isRegExp方法用于檢查對(duì)象是否是RegExp類型,即是否為正則表達(dá)式對(duì)象。幾種使用示例如下:

var util = require('util');

util.isRegExp(/some regexp/)
  // true
util.isRegExp(new RegExp('another regexp'))
  // true
util.isRegExp({})
  // false


6. 檢查對(duì)象是否是Date類型:util.isDate(object)

isDate方法用于檢查對(duì)象是否是RegExp類型,即日期類型。幾種使用示例如下:

var util = require('util');

util.isDate(new Date())
  // true
util.isDate(Date())
  // false (without 'new' returns a String)
util.isDate({})
  // false


7. 檢查對(duì)象是否是Error類型: util.isError(object)

isError方法用于檢查對(duì)象是否是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. 實(shí)現(xiàn)對(duì)象間原型繼承:util.inherits(constructor, superConstructor)

util.inherits(constructor, superConstructor)是一個(gè)實(shí)現(xiàn)對(duì)象間原型繼承的方法。JavaScript 的面向?qū)ο筇匦允腔谠偷睦^承,與常見的基于類的不同,JavaScript 沒有提供對(duì)象繼承的語言級(jí)別特性,而是通過原型鏈復(fù)制來實(shí)現(xiàn)的。inherits方法可以將父類原型鏈上的方法復(fù)制到子類中,實(shí)現(xiàn)原型式繼承。

使用示例,實(shí)現(xiàn)一型式繼承:

var util = require("util");
var events = require("events");

//MyStream構(gòu)造函數(shù),在構(gòu)造函數(shù)將this指向本對(duì)象
function MyStream() {
    events.EventEmitter.call(this);
}

//復(fù)制父對(duì)象上所有的方法
util.inherits(MyStream, events.EventEmitter);

//對(duì)MyStream類添加原型方法
MyStream.prototype.write = function(data) {
    this.emit("data", data);
}

var stream = new MyStream();

//由于MyStream繼承自EventEmitter,所以其實(shí)例stream是MyStream類的實(shí)例也是EventEmitter類的實(shí)例
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)定版本或已被其它方法替代,不再贅述。 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多