稳定性: 4 - 锁定

这些函数都在'util' 模块里。使用 require('util') 来访问他们。

util 模块原先设计的初衷是用来支持 node 的内部 API 的。这里的很多的函数对你的程序来说都非常有用。如果你觉得这些函数不能满足你的要求,那你可以写自己的工具函数。我们不希望 'util' 模块里添加对于 node 内部函数无用的扩展。

util.debuglog(section)

  • section {字符串} 被调试的程序节点部分
  • Returns: {Function} 日志函数

用来创建一个有条件的写到 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

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

使用第一个参数返回一个格式化的字符串,类似 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'

util.log(string)

stdout 输出并带有时间戳.

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

util.inspect(object[, options])

返回一个对象的字符串表现形式,在代码调试的时候非常有用。

通过加入一些可选选项,来改变对象的格式化输出形式:

  • 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.stylesutil.inspect.colors 对象,自定义全局的输出颜色,

util.inspect.stylesutil.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' }"

util.isArray(object)

Array.isArray 的内部别名。

如果参数 "object" 是数组,返回 true ,否则返回 false

var util = require('util');

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

util.isRegExp(object)

如果参数 "object" 是 RegExp 返回 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" 是 Date 返回 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" 是 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

util.inherits(constructor, superConstructor)

从一个构造函数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!"

util.deprecate(function, string)

标明该方法不要再使用。

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 应用将会抛出异常

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 - 抛弃: Use readableStream.pipe(writableStream)

stream.pipe 的前身。

Node.js 实用工具的更多相关文章

  1. 2015年最佳的15个 Node.js 开发工具

    Node.js 越来月流行,这个基于 Google V8 引擎建立的平台, 用于方便地搭建响应速度快.易于扩展的网络应用.在本文中,我们列出了2015年最佳的15个 Node.js 开发工具.这些工具 ...

  2. 推荐15个月 Node.js 开发工具

    Node.js 越来月流行.这个基于 Google V8 引擎建立的平台, 用于方便地搭建响应速度快.易于扩展的网络应用.在本文中.我们列出了2015年最佳的15个 Node.js 开发工具.这些工具 ...

  3. 推荐近期15个 Node.js 开发工具

    近来Node.js 越来月流行了,这个基于Google V8 引擎建立的平台, 用于方便地搭建响应速度快.易于扩展的网络应用.在本文中,我们列出了2015年最佳的15个 Node.js 开发工具.这些 ...

  4. Node.js 常用工具

    Node.js 常用工具 util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心JavaScript 的功能 过于精简的不足. util.inherits util.inherit ...

  5. Node.js 常用工具util包

    Node.js 常用工具 util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心JavaScript 的功能 过于精简的不足. util.isError(obj); util.is ...

  6. 我用的一些Node.js开发工具、开发包、框架等总结

    开发工具 1.WebStorm,毫无疑问非他莫属,跨平台,强大的代码提示,支持Nodejs调试,此外还支持vi编辑模式,这点我很喜欢. 2.做些小型项目用Sublime Text. 3.Browser ...

  7. Node.js 小工具--supervisor

    Node.js 在写文件的时候 一旦更改.每次都得重新运行 app.js. 很麻烦. supervisor 工具可以帮助你 监听文件改动,自动重启. sudo npm install -g super ...

  8. Node.js开发工具、开发包、框架等总结

    开发工具 1.WebStorm,毫无疑问非他莫属,跨平台,强大的代码提示,支持Nodejs调试,此外还支持vi编辑模式,这点我很喜欢.2.做些小型项目用Sublime Text.3.Browserif ...

  9. Node.js实用知识点

    本文介绍如何使用nodejs 简单的HttpServer 调试nodejs 基础路由 nodejs配置开发和生产环境 nodejs核心模块一览 express用法 文件I/O nodejs模块 nod ...

随机推荐

  1. git初试

    在gitLab上新建一个项目,creat项目文件之后,进入到项目的路径之后,复制命令git clone ‘git@gitlab.touzila.com:xiacaixiang/gitgitTest1. ...

  2. jupyter notebook的架构

    最近项目需要改写jupyter notebook的内核,由于内功不够,英语过差,读文档真的是心痛,然后各种搜索找到了一篇不错的讲解. 转自:http://blog.just4fun.site/jupy ...

  3. wmv12下安装centos7

    第一步:安装软件: vmw版本是12,并在vmw下安装centos为CentOS-7-x86_64-DVD-1708.iso: 第二步:修改vmw虚拟网络配置 1)配置VMnet8 修改ip等信息 点 ...

  4. https原理通俗了解

    摘要:本文尝试一步步还原HTTPS的设计过程,以理解为什么HTTPS最终会是这副模样.但是这并不代表HTTPS的真实设计过程.在阅读本文时,你可以尝试放下已有的对HTTPS的理解,这样更利于" ...

  5. 0417 jQuery基础知识

    jQuery基础知识 jQuery需要引入一个js文件,并且这个文件在所有js代码之前(包括引入的其他js文件) 基础操作(对比js): 1.找标签: js:document.getElement.. ...

  6. [LeetCode] Toeplitz Matrix 托普利兹矩阵

    A matrix is Toeplitz if every diagonal from top-left to bottom-right has the same element. Now given ...

  7. Python模块之 - logging

    日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. Logging模块构成 组成 ...

  8. 处处留心皆学问——由“display:inline-block;”导致的间距引发的思考。

    昨天在做一个demo时遇到了一个问题:我有五个li需要并排排列,然后自然而然的我给它们设了display:inline-block;但是,过了很久之后发现,除了我写的样式外,它默认有一个间距,我们都不 ...

  9. 实验吧_貌似有点难(php代码审计)&头有点大

    二话不说先贴代码 <?php function GetIP(){ if(!empty($_SERVER["HTTP_CLIENT_IP"])) $cip = $_SERVER ...

  10. ●BZOJ 3998 [TJOI2015]弦论

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3998题解: 后缀自动机. 当T=0时, 由于在后缀自动机上沿着trans转移,每个串都是互不 ...