穩定性: 4 - 鎖定
這些函數都在'util'
模塊里。使用 require('util')
來訪問他們。
util
模塊原先設計的初衷是用來支持 node 的內部 API 的。這里的很多的函數對你的程序來說都非常有用。如果你覺得這些函數不能滿足你的要求,那你可以寫自己的工具函數。我們不希望 'util'
模塊里添加對于 node 內部函數無用的擴展。
section
{字符串} 被調試的程序節點部分用來創建一個有條件的寫到 stderr 的函數(基于 NODE_DEBUG
環境變量)。如果 section
出現在環境變量里,返回函數將會和 console.error()
類似。否則,返回一個空函數。
例如:
javascript
var debuglog = util.debuglog('foo');
var bar = 123;
debuglog('hello from foo [%d]', bar);
如果這個程序以 NODE_DEBUG=foo
的環境運行,將會輸出:
FOO 3245: hello from foo [123]
3245
是進程 ID。如果沒有運行在這個環境變量里,將不會打印任何東西。
可以用逗號切割多個 NODE_DEBUG
環境變量。例如:NODE_DEBUG=fs,net,tls
。
使用第一個參數返回一個格式化的字符串,類似 printf
。
第一個參數是字符串,它包含 0 或更多的占位符。每個占位符被替換成想要參數轉換的值。支持的占位符包括:
%s
- 字符串.%d
- 數字 (整數和浮點數).%j
- JSON. 如果參數包含循環引用,將會用字符串替換R%%
- 單獨一個百分號 ('%'
)。 不會消耗一個參數。如果占位符沒有包含一個相應的參數,占位符不會被替換。
util.format('%s:%s', 'foo'); // 'foo:%s'
如果參數超過占位符,多余的參數將會用 util.inspect()
轉換成字符串,并拼接在一起,用空格隔開。
util.format('%s:%s', 'foo', 'bar', 'baz'); // 'foo:bar baz'
如果第一個參數不是格式化字符串,那么 util.format()
會返回所有參數拼接成的字符串(空格分割)。每個參數都會用 util.inspect()
轉換成字符串。
util.format(1, 2, 3); // '1 2 3'
在 stdout
輸出并帶有時間戳.
require('util').log('Timestamped message.');
返回一個對象的字符串表現形式,在代碼調試的時候非常有用。
通過加入一些可選選項,來改變對象的格式化輸出形式:
showHidden
- 如果為 true
,將會顯示對象的不可枚舉屬性。默認為 false
。
depth
- 告訴 inspect
格式化對象時遞歸多少次。這在格式化大且復雜對象時非常有用。默認為 2
。如果想無窮遞歸的話,傳 null
。
colors
- 如果為 true
, 輸出內容將會格式化為有顏色的代碼。默認為 false
, 顏色可以自定義,參見下文。
customInspect
- 如果為 false
, 那么定義在被檢查對象上的inspect(depth, opts) 方法將不會被調用。 默認為true。檢查 util
對象上所有屬性的例子:
var util = require('util');
console.log(util.inspect(util, { showHidden: true, depth: null }));
當被調用的時候,參數值可以提供自己的自定義inspect(depth, opts)方法。該方法會接收當前的遞歸檢查深度,以及傳入util.inspect()的其他參數。
util.inspect
顏色util.inspect
通過 util.inspect.styles
和 util.inspect.colors
對象,自定義全局的輸出顏色,
util.inspect.styles
和 util.inspect.colors
組成風格顏色的一對映射。
高亮風格和他們的默認值:
數字
(黃色)boolean
(黃色)字符串
(綠色)date
(洋紅)regexp
(紅色)null
(粗體)undefined
(斜體)special
- (青綠色)name
(內部用,不是風格)預定義的顏色為: white
, 斜體
, black
, blue
, cyan
,綠色
, 洋紅
, 紅色
和 黃色
.以及 粗體
, 斜體
, 下劃線
和 反選
風格.
inspect()
函數對象也能自定義 inspect(depth)
函數, 當使用util.inspect()檢查該對象的時候,將會執行對象自定義的檢查方法:
var util = require('util');
var obj = { name: 'nate' };
obj.inspect = function(depth) {
return '{' + this.name + '}';
};
util.inspect(obj);
// "{nate}"
你可以返回另外一個對象,返回的字符串會根據返回的對象格式化。這和 JSON.stringify()
的工作流程類似。You may also return another Object entirely, and the returned 字符串 will beformatted according to the returned Object. This is similar to howJSON.stringify()
works:
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 的內部別名。
如果參數 "object" 是數組,返回 true
,否則返回 false
。
var util = require('util');
util.isArray([])
// true
util.isArray(new Array)
// true
util.isArray({})
// false
如果參數 "object" 是 RegExp
返回 true
,否則返回 false
。
var util = require('util');
util.isRegExp(/some regexp/)
// true
util.isRegExp(new RegExp('another regexp'))
// true
util.isRegExp({})
// false
如果參數 "object" 是 Date
返回 true
,否則返回 false
。
var util = require('util');
util.isDate(new Date())
// true
util.isDate(Date())
// false (without 'new' returns a String)
util.isDate({})
// false
如果參數 "object" 是 Error
返回 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
從一個構造函數constructor繼承原型方法到另一個。構造函數的原型將被設置為一個新的從超類(superConstructor
)創建的對象。
通過 constructor.super_
屬性可以訪問 superConstructor
。
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!"
標明該方法不要再使用。
exports.puts = exports.deprecate(function() {
for (var i = 0, len = arguments.length; i < len; ++i) {
process.stdout.write(arguments[i] + '\n');
}
}, 'util.puts: Use console.log instead')
返回一個修改過的函數,默認情況下僅警告一次。如果設置了 --no-deprecation
該函數不做任何事。如果設置了--throw-deprecation
,如果使用了該 API 應用將會拋出異常
穩定性: 0 - 拋棄: 使用 console.error() 替換。
console.error
的前身。
穩定性: 0 - 拋棄: 使用 console.error() 替換。
console.error
的前身。
穩定性: 0 - 拋棄:使用 console.log() 替換。
console.log
的前身。
穩定性: 0 - 拋棄: 使用 console.log() 替換。
console.log
的前身。
穩定性: 0 - 拋棄: Use readableStream.pipe(writableStream)
stream.pipe
的前身。