這些功能在模塊'util'
中,通過require('util')
來使用它們。
util
模塊主要的設(shè)計(jì)意圖是滿足io.js
內(nèi)部 API 的需要。但是許多工具對(duì)于你的程序也十分有用。如果你發(fā)現(xiàn)這些功能不能滿足你的需要,那么鼓勵(lì)你編寫自己的工具集。我們對(duì)任何io.js
內(nèi)部功能不需要的功能,都不感興趣。
這個(gè)方法被用來在NODE_DEBUG
環(huán)境變量存在的情況下,創(chuàng)建一個(gè)有條件寫入stderr
的函數(shù)。如果section
名出現(xiàn)在環(huán)境變量中,那么返回的函數(shù)與console.error()
類似。否則,返回空函數(shù)。
例子:
var debuglog = util.debuglog('foo');
var bar = 123;
debuglog('hello from foo [%d]', bar);
如果程序在NODE_DEBUG=foo
環(huán)境下運(yùn)行,那么輸出將是:
FOO 3245: hello from foo [123]
3245
是進(jìn)程 id。如果這個(gè)環(huán)境變量沒有設(shè)置,那么將不會(huì)打印任何東西。
你可以通過逗號(hào)設(shè)置多個(gè)NODE_DEBUG
環(huán)境變量。例如,NODE_DEBUG=fs,net,tls
。
使用第一個(gè)參數(shù),像printf
一樣的格式輸出格式化字符串。
第一個(gè)參數(shù)是一個(gè)包含了0個(gè)或更多占位符的字符串。每個(gè)占位符都被其后的參數(shù)所替換。支持的占位符有:
'[Circular]'
。'%'
),它不消耗一個(gè)參數(shù)。如果占位符沒有對(duì)應(yīng)的參數(shù),那么占位符將不被替換。
util.format('%s:%s', 'foo'); // 'foo:%s'
如果參數(shù)多余占位符,那么額外的參數(shù)會(huì)被轉(zhuǎn)換成字符串(對(duì)于對(duì)象和鏈接,使用util.inspect()
),并且以空格連接。
util.format('%s:%s', 'foo', 'bar', 'baz'); // 'foo:bar baz'
如果第一個(gè)參數(shù)不是格式化字符串,那么util.format()
將會(huì)返回一個(gè)以空格連接的所有參數(shù)的字符串。每一個(gè)參數(shù)都被調(diào)用util.inspect()
來轉(zhuǎn)換成字符串。
util.format(1, 2, 3); // '1 2 3'
在控制臺(tái)輸出帶有時(shí)間戳的信息。
require('util').log('Timestamped message.');
返回一個(gè)代表了object
的字符串,在調(diào)試時(shí)很有用。
一個(gè)可選的options
對(duì)象可以被傳遞以下屬性來影響字符串的格式:
showHidden - 如果設(shè)置為true
,那么對(duì)象的不可枚舉屬性也會(huì)被顯示。默認(rèn)為false
。
depth - 告訴inspect
格式化對(duì)象時(shí)需要遞歸的次數(shù)。這對(duì)于巨大的復(fù)雜對(duì)象十分有用。默認(rèn)為2
。傳遞null
表示無限遞歸。
colors - 如果為true
,那么輸出會(huì)帶有 ANSI 顏色代碼風(fēng)格。默認(rèn)為false
。顏色是可以自定義的,參閱下文。
false
,那么定義在被檢查對(duì)象上的inspect(depth, opts)
函數(shù)將不會(huì)被調(diào)用。默認(rèn)為false
。一個(gè)檢查util
對(duì)象所有屬性的例子:
var util = require('util');
console.log(util.inspect(util, { showHidden: true, depth: null }));
參數(shù)值可以提供了它們自己的inspect(depth, opts)
函數(shù),當(dāng)被調(diào)用時(shí)它們會(huì)收到當(dāng)前的遞歸深度值,以及其他傳遞給util.inspect()
的選項(xiàng)。
util.inspect
顏色util.inspect
的有顏色的輸出(如果啟用)可以全局的通過util.inspect.styles
和util.inspect.colors
對(duì)象來自定義。
util.inspect.styles
是通過util.inspect.colors
設(shè)置每個(gè)風(fēng)格一個(gè)顏色的映射。高亮風(fēng)格和它們的默認(rèn)值為number (yellow) boolean (yellow) string (green) date (magenta) regexp (red) null (bold) undefined (grey) special
。這時(shí)的唯一方法(cyan) * name (intentionally no styling)
。
預(yù)定義顏色有white, grey, black, blue, cyan, green, magenta, red 和 yellow
。他們都是bold
,italic
,underline
和inverse
代碼。
inspect()
函數(shù)對(duì)象也可以自己定義inspect(depth)
函數(shù),util.inspect()
將會(huì)調(diào)用它,并且輸出它的結(jié)果:
var util = require('util');
var obj = { name: 'nate' };
obj.inspect = function(depth) {
return '{' + this.name + '}';
};
util.inspect(obj);
// "{nate}"
你也可以完全返回另一個(gè)對(duì)象,并且返回的字符串是由這個(gè)返回對(duì)象格式化而來的,這也JSON.stringify()
相似:
var obj = { foo: 'this will not show up in the inspect() output' };
obj.inspect = function(depth) {
return { bar: 'baz' };
};
util.inspect(obj);
// "{ bar: 'baz' }"
Array.isArray
的內(nèi)部別名。
如果object
是一個(gè)數(shù)組則返回true
,否則返回false
。
var util = require('util');
util.isArray([])
// true
util.isArray(new Array)
// true
util.isArray({})
// false
如果object
是一個(gè)正則表達(dá)式則返回true
,否則返回false
。
var util = require('util');
util.isRegExp(/some regexp/)
// true
util.isRegExp(new RegExp('another regexp'))
// true
util.isRegExp({})
// false
如果object
是一個(gè)日期則返回true
,否則返回false
。
var util = require('util');
util.isDate(new Date())
// true
util.isDate(Date())
// false (without 'new' returns a String)
util.isDate({})
// false
如果object
是一個(gè)錯(cuò)誤對(duì)象則返回true
,否則返回false
。
var util = require('util');
util.isError(new Error())
// true
util.isError(new TypeError())
// true
util.isError({ name: 'Error', message: 'an error occurred' })
// false
如果object
是一個(gè)布爾值則返回true
,否則返回false
。
var util = require('util');
util.isBoolean(1)
// false
util.isBoolean(0)
// false
util.isBoolean(false)
// true
如果object
是嚴(yán)格的null
則返回true
,否則返回false
。
var util = require('util');
util.isNull(0)
// false
util.isNull(undefined)
// false
util.isNull(null)
// true
如果object
是一null
或undefined
則返回true
,否則返回false
。
var util = require('util');
util.isNullOrUndefined(0)
// false
util.isNullOrUndefined(undefined)
// true
util.isNullOrUndefined(null)
// true
如果object
是一個(gè)數(shù)字則返回true
,否則返回false
。
var util = require('util');
util.isNumber(false)
// false
util.isNumber(Infinity)
// true
util.isNumber(0)
// true
util.isNumber(NaN)
// true
如果object
是一個(gè)字符串則返回true
,否則返回false
。
var util = require('util');
util.isString('')
// true
util.isString('foo')
// true
util.isString(String('foo'))
// true
util.isString(5)
// false
如果object
是一個(gè)Symbol
則返回true
,否則返回false
。
var util = require('util');
util.isSymbol(5)
// false
util.isSymbol('foo')
// false
util.isSymbol(Symbol('foo'))
// true
如果object
是undefined
則返回true
,否則返回false
。
var util = require('util');
var foo;
util.isUndefined(5)
// false
util.isUndefined(foo)
// true
util.isUndefined(null)
// false
如果object
嚴(yán)格的是一個(gè)對(duì)象而不是一個(gè)函數(shù),則返回true
,否則返回false
。
var util = require('util');
util.isObject(5)
// false
util.isObject(null)
// false
util.isObject({})
// true
util.isObject(function(){})
// false
如果object
是一個(gè)函數(shù)則返回true
,否則返回false
。
var util = require('util');
function Foo() {}
var Bar = function() {};
util.isFunction({})
// false
util.isFunction(Foo)
// true
util.isFunction(Bar)
// true
如果object
是一個(gè)基本值則返回true
,否則返回false
。
var util = require('util');
util.isPrimitive(5)
// true
util.isPrimitive('foo')
// true
util.isPrimitive(false)
// true
util.isPrimitive(null)
// true
util.isPrimitive(undefined)
// true
util.isPrimitive({})
// false
util.isPrimitive(function() {})
// false
util.isPrimitive(/^$/)
// false
util.isPrimitive(new Date())
// false
如果object
是一個(gè)buffer
則返回true
,否則返回false
。
var util = require('util');
util.isBuffer({ length: 0 })
// false
util.isBuffer([])
// false
util.isBuffer(new Buffer('hello world'))
// true
將一個(gè)構(gòu)造函數(shù)所有的原型方法繼承到到另一個(gè)中。構(gòu)造函數(shù)的原型將會(huì)被設(shè)置為一個(gè)超類創(chuàng)建的新對(duì)象。
為了方便起見,超類可以通過constructor.super_
來訪問。
var util = require("util");
var events = require("events");
function MyStream() {
events.EventEmitter.call(this);
}
util.inherits(MyStream, events.EventEmitter);
MyStream.prototype.write = function(data) {
this.emit("data", data);
}
var stream = new MyStream();
console.log(stream instanceof events.EventEmitter); // true
console.log(MyStream.super_ === events.EventEmitter); // true
stream.on("data", function(data) {
console.log('Received data: "' + data + '"');
})
stream.write("It works!"); // Received data: "It works!"
標(biāo)記一個(gè)方法為不應(yīng)再使用。
var util = require('util');
exports.puts = util.deprecate(function() {
for (var i = 0, len = arguments.length; i < len; ++i) {
process.stdout.write(arguments[i] + '\n');
}
}, 'util.puts: Use console.log instead');
默認(rèn)返回一個(gè)被運(yùn)行時(shí)會(huì)發(fā)出一次警告的,修改后的函數(shù)。
如果--no-deprecation
被設(shè)置,那么這個(gè)函數(shù)將為空??梢栽谶\(yùn)行時(shí)通過process.noDeprecation
布爾值配置(只有在模塊被加載前設(shè)置,才會(huì)有效)。
如果--trace-deprecation
被設(shè)置,當(dāng)被棄用的 API 第一次被使用時(shí),會(huì)向控制臺(tái)打印一個(gè)警告和堆棧信息??梢栽谶\(yùn)行時(shí)通過process.traceDeprecation
布爾值配置。
如果--throw-deprecation
被設(shè)置,那么當(dāng)被棄用的 API 被使用時(shí),應(yīng)用會(huì)拋出一個(gè)錯(cuò)誤??梢栽谶\(yùn)行時(shí)通過process.throwDeprecation
布爾值配置。
process.throwDeprecation
的優(yōu)先級(jí)高于process.traceDeprecation
。
穩(wěn)定度: 0 - 棄用: 使用
console.error()
代替。
被棄用,console.error
的前身。
穩(wěn)定度: 0 - 棄用: 使用
console.error()
代替。
被棄用,console.error
的前身。
穩(wěn)定度: 0 - 棄用: 使用
console.log()
代替。
被棄用,console.log
的前身。
穩(wěn)定度: 0 - 棄用: 使用
console.log()
代替。
被棄用,console.log
的前身。
穩(wěn)定度: 0 - 棄用: 使用
readableStream.pipe(writableStream)
代替。
被棄用,stream.pipe()
的前身。