ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# utils ~~~ 稳定度: 4 - 冻结 ~~~ 如果你想使用模块 `'util'`中已定义的方法. 只需 `require('util')` 即可使用. `util`模块设计的主要目的是为了满足Node内部API的需求 。这个模块中的很多方法在你编写Node程序的时候都是很有帮助的。如果你觉得提供的这些方法满足不了你的需求,那么我们鼓励你编写自己的实用工具方法。我们 不希望`util`模块中添加任何对于Node的内部功能非必要的扩展。 ### util.debuglog(section) - `section` {String} 被调试的程序节点部分 - 返回值: {Function} 日志处理函数 这个方法是在存在`NODE_DEBUG`环境变量的基础上,创建一个有条件写到stderr里的函数。如果“节点”的名字出现在这个环境变量里,那么就返回一个功能类似于`console.error()`的函数.如果不是,那么返回一个空函数. 例如: 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`。 ### util.format(format, [...]) 根据第一个参数,返回一个格式化字符串,类似`printf`的格式化输出。 第一个参数是一个字符串,包含零个或多个*占位符*。 每一个占位符被替换为与其对应的转换后的值。 支持的占位符有: - `%s` - 字符串. - `%d` - 数字 (整型和浮点型). - `%j` - JSON. 如果这个参数包含循环对象的引用,将会被替换成字符串 `'[Circular]'`。 - `%%` - 单独一个百分号(`'%'`)。不会消耗一个参数。 如果占位符没有相对应的参数,占位符将不会被替换。 ~~~ 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' ~~~ ### util.log(string) 在控制台进行输出,并带有时间戳。 ~~~ 示例:require('util').log('Timestamped message.'); ~~~ ### util.inspect(object, [options]) 返回一个对象的字符串表现形式, 在代码调试的时候非常有用. 可以通过加入一些可选选项,来改变对象的格式化输出形式: - `showHidden` - 如果设为 `true`,那么该对象的不可枚举的属性将会被显示出来。默认为`false`. - `depth` - 告诉 `inspect` 格式化对象的时候递归多少次。这个选项在格式化复杂对象的时候比较有用。 默认为 `2`。如果想无穷递归下去,则赋值为`null`即可。 - `colors` - 如果设为`true`,将会以`ANSI`颜色代码风格进行输出. 默认是`false`。颜色是可定制的,请看下面: - `customInspect` - 如果设为 `false`,那么定义在被检查对象上的`inspect(depth, opts)` 方法将不会被调用。 默认为`true`。 示例:检查`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`分配给每个风格颜色的一个映射。 高亮风格和它们的默认值: *`number` (黄色)*`boolean` (黄色) *`string` (绿色)*`date` (洋红色) *`regexp` (红色)*`null` (粗体) *`undefined` (灰色)*`special` - 在这个时候的唯一方法 (青绿色) * `name` (无风格) 预定义的颜色代码: `white`, `grey`, `black`, `blue`, `cyan`, `green`, `magenta`, `red` 和 `yellow`。 还有 `bold`, `italic`, `underline` 和 `inverse` 代码。 ### 自定义对象的`inspect()`方法 对象可以定义自己的 `inspect(depth)`方法;当使用`util.inspect()`检查该对象的时候,将会执行对象自定义的检查方法。 ~~~ util.inspect(obj); // "{nate}" ~~~ 您也可以返回完全不同的另一个对象,而且返回的字符串将被根据返回的对象格式化。它和`JSON.stringify()`工作原理类似: ~~~ util.inspect(obj); // "{ bar: 'baz' }" ~~~ ### util.isArray(object) 如果给定的对象是`数组`类型,就返回`true`,否则返回`false` ~~~ util.isArray([]) // true util.isArray(new Array) // true util.isArray({}) // false ~~~ ### util.isRegExp(object) 如果给定的对象是`RegExp`类型,就返回`true`,否则返回`false`。 ~~~ util.isRegExp(/some regexp/) // true util.isRegExp(new RegExp('another regexp')) // true util.isRegExp({}) // false ~~~ ### util.isDate(object) 如果给定的对象是`Date`类型,就返回`true`,否则返回`false`。 ~~~ util.isDate(new Date()) // true util.isDate(Date()) // false (没有关键字 'new' 返回一个字符串) util.isDate({}) // false ~~~ ### util.isError(object) 如果给定的对象是`Error`类型,就返回`true`,否则返回`false`。 ~~~ util.isError(new Error()) // true util.isError(new TypeError()) // true util.isError({ name: 'Error', message: 'an error occurred' }) // false ~~~ ### util.inherits(constructor, superConstructor) 通过[构造函数](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/constructor),继承原型对象上的方法。构造函数的`原型`将被设置为一个新的 从`超类`创建的对象。 你可以很方便的通过 `constructor.super_`来访问到`superConstructor` ~~~ stream.on("data", function(data) { console.log('Received data: "' + data + '"'); }) stream.write("It works!"); // 输出结果:Received data: "It works!" ~~~ ### util.debug(string) ~~~ 稳定度: 0 - 已过时: 请使用 console.error() 代替 ~~~ `console.error`的已过时的前身 ### util.error([...]) ~~~ 稳定度: 0 - 已过时: 请使用 console.error() 代替 ~~~ `console.error`的已过时的前身 ### util.puts([...]) 稳定度: 0 - 已过时: 请使用 console.log() 代替 `console.log`的已过时的前身 ### util.print([...]) 稳定度: 0 - 已过时: 请使用 console.log() 代替 `console.log`的已过时的前身 ### util.pump(readableStream, writableStream, [callback]) 稳定度: 0 - 已过时: 请使用readableStream.pipe(writableStream)代替 `stream.pipe()`的已过时的前身