IO.js Utilities

2018-11-28 22:36 更新

穩(wěn)定度: 2 - 穩(wěn)定

這些功能在模塊'util'中,通過require('util')來使用它們。

util模塊主要的設(shè)計意圖是滿足io.js內(nèi)部API的需要。但是許多工具對于你的程序也十分有用。如果你發(fā)現(xiàn)這些功能不能滿足你的需要,那么鼓勵你編寫自己的工具集。我們對任何io.js內(nèi)部功能不需要的功能,都不感興趣。

util.debuglog(section)

  • section String 需要被調(diào)試的程序節(jié)點
  • Returns: Function 日志處理函數(shù)

這個方法被用來在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

util.format(format[, ...])

使用第一個參數(shù),像printf一樣的格式輸出格式化字符串。

第一個參數(shù)是一個包含了0個或更多占位符的字符串。每個占位符都被其后的參數(shù)所替換。支持的占位符有:

  • %s - 字符串
  • %d - 數(shù)字(整數(shù)和浮點數(shù))
  • %j - JSON。如果參數(shù)包含循環(huán)引用,則返回字符串'[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'

util.log(string)

在控制臺輸出帶有時間戳的信息。

require('util').log('Timestamped message.');

util.inspect(object[, options])

返回一個代表了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.stylesutil.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,italicunderlineinverse代碼。

自定義對象的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' }"

util.isArray(object)

Array.isArray的內(nèi)部別名。

如果object是一個數(shù)組則返回true,否則返回false

var util = require('util');

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

util.isRegExp(object)

如果object是一個正則表達式則返回true,否則返回false。

var util = require('util');

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

util.isDate(object)

如果object是一個日期則返回true,否則返回false。

var util = require('util');

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

util.isError(object)

如果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

util.isBoolean(object)

如果object是一個布爾值則返回true,否則返回false。

var util = require('util');

util.isBoolean(1)
  // false
util.isBoolean(0)
  // false
util.isBoolean(false)
  // true

util.isNull(object)

如果object是嚴格的null則返回true,否則返回false。

var util = require('util');

util.isNull(0)
  // false
util.isNull(undefined)
  // false
util.isNull(null)
  // true

util.isNullOrUndefined(object)

如果object是一nullundefined則返回true,否則返回false。

var util = require('util');

util.isNullOrUndefined(0)
  // false
util.isNullOrUndefined(undefined)
  // true
util.isNullOrUndefined(null)
  // true

util.isNumber(object)

如果object是一個數(shù)字則返回true,否則返回false

var util = require('util');

util.isNumber(false)
  // false
util.isNumber(Infinity)
  // true
util.isNumber(0)
  // true
util.isNumber(NaN)
  // true

util.isString(object)

如果object是一個字符串則返回true,否則返回false。

var util = require('util');

util.isString('')
  // true
util.isString('foo')
  // true
util.isString(String('foo'))
  // true
util.isString(5)
  // false

util.isSymbol(object)

如果object是一個Symbol則返回true,否則返回false。

var util = require('util');

util.isSymbol(5)
  // false
util.isSymbol('foo')
  // false
util.isSymbol(Symbol('foo'))
  // true

util.isUndefined(object)

如果objectundefined則返回true,否則返回false。

var util = require('util');

var foo;
util.isUndefined(5)
  // false
util.isUndefined(foo)
  // true
util.isUndefined(null)
  // false

util.isObject(object)

如果object嚴格的是一個對象而不是一個函數(shù),則返回true,否則返回false。

var util = require('util');

util.isObject(5)
  // false
util.isObject(null)
  // false
util.isObject({})
  // true
util.isObject(function(){})
  // false

util.isFunction(object)

如果object是一個函數(shù)則返回true,否則返回false。

var util = require('util');

function Foo() {}
var Bar = function() {};

util.isFunction({})
  // false
util.isFunction(Foo)
  // true
util.isFunction(Bar)
  // true

util.isPrimitive(object)

如果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

util.isBuffer(object)

如果object是一個buffer則返回true,否則返回false。

var util = require('util');

util.isBuffer({ length: 0 })
  // false
util.isBuffer([])
  // false
util.isBuffer(new Buffer('hello world'))
  // true

util.inherits(constructor, superConstructor)

將一個構(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!"

util.deprecate(function, string)

標記一個方法為不應(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。

util.debug(string)

穩(wěn)定度: 0 - 棄用: 使用console.error()代替。

被棄用,console.error的前身。

util.error([...])

穩(wěn)定度: 0 - 棄用: 使用console.error()代替。

被棄用,console.error的前身。

util.puts([...])

穩(wěn)定度: 0 - 棄用: 使用console.log()代替。

被棄用,console.log的前身。

util.print([...])

穩(wěn)定度: 0 - 棄用: 使用console.log()代替。

被棄用,console.log的前身。

util.pump(readableStream, writableStream[, callback])

穩(wěn)定度: 0 - 棄用: 使用readableStream.pipe(writableStream)代替。

被棄用,stream.pipe()的前身。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號