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