鍍金池/ 教程/ HTML/ util
punycode
Zlib
V8
Debugger
Readline
DNS
File System
util
Query String
Assert
執(zhí)行<code>JavaScript</code>
Console
Errors
Events
Timers
HTTP
Child Process
Buffer
Stream
Path
Modules
net
REPL
process
Global Objects
Crypto
StringDecoder
TTY
TLS (SSL)
OS
HTTPS
UDP / Datagram Sockets
Cluster
URL

util

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

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

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

util.debuglog(section)

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

這個(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

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

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

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

  • %s - 字符串
  • %d - 數(shù)字(整數(shù)和浮點(diǎn)數(shù))
  • %j - JSON。如果參數(shù)包含循環(huán)引用,則返回字符串'[Circular]'。
  • %% - 單獨(dú)的百分比符號(hào)('%'),它不消耗一個(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'

util.log(string)

在控制臺(tái)輸出帶有時(shí)間戳的信息。

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

util.inspect(object[, options])

返回一個(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。顏色是可以自定義的,參閱下文。

  • customInspect - 如果為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.stylesutil.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,underlineinverse代碼。

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

util.isArray(object)

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

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

var util = require('util');

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

util.isRegExp(object)

如果object是一個(gè)正則表達(dá)式則返回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是一個(gè)日期則返回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是一個(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

util.isBoolean(object)

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

var util = require('util');

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

util.isNull(object)

如果object是嚴(yán)格的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是一個(gè)數(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是一個(gè)字符串則返回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是一個(gè)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嚴(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

util.isFunction(object)

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

util.isPrimitive(object)

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

util.isBuffer(object)

如果object是一個(gè)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è)構(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!"

util.deprecate(function, string)

標(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。

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()的前身。