16、Node.js 常用工具

Node.js util 模块提供了一些常用方法的集合,用于弥补核心 JavaScript 的功能 过于精简的不足

接下来我们将学习 Node.js util 模块常用的方法

引入模块

var util = require('util');

util.inherits() 方法

Node.js util.inherits 方法用于实现一个实现对象间原型继承的方法

JavaScript 的面向对象特性是基于原型的,与常见的基于类的不同

JavaScript 没有提供对象继承的语言级别特性,而是通过原型复制来实现的

语法

Node.js util.inherits 方法语法如下

util.inherits(constructor, superConstructor)

范例

我们使用 util.inherits 实现 Sub 继承自 Base

main.js

/*
 * filename: main.js
 * author: DDKK.COM 弟弟快看,程序员编程资料站(ddkk.com)
 * Copyright © 2015-2065 ddkk.com. All rights reserved.
*/

var util = require('util'); 
function Base() { 
    this.name = 'base'; 
    this.base = 1991; 
    this.sayHello = function() { 
    console.log('Hello ' + this.name); 
    }; 
} 
Base.prototype.showName = function() { 
    console.log(this.name);
}; 
function Sub() { 
    this.name = 'sub'; 
} 
util.inherits(Sub, Base); 
var objBase = new Base(); 
objBase.showName(); 
objBase.sayHello(); 
console.log(objBase); 
var objSub = new Sub(); 
objSub.showName();
// objSub.sayHello(); 
console.log(objSub);

上面的代码,我们定义了两个对象 Base 和 Sub,Base 有三个在构造函数 内定义的属性和一个原型中定义的函数

然后通过 util.inherits 实现 Sub 对象继承 Base 对象

运行以上 Node.js 范例,输出结果如下

$ node main.js
base
Hello base
Base { name: 'base', base: 1991, sayHello: [Function] }
sub
Sub { name: 'sub' }

注意

需要注意的是,Sub 仅仅继承了Base 在原型中定义的函数,而构造函数内部创造的 base 属性和 sayHello 函数都没有被 Sub 继承

同时,在原型中定义的属性不能被 console.log 作为对象的属性输出

如果我们去掉 objSub.sayHello(); 这行的注释,然后运行代码,就会报错

$ node main.js
base
Hello base
Base { name: 'base', base: 1991, sayHello: [Function] }
sub
main.js:28
objSub.sayHello(); 
       ^

TypeError: objSub.sayHello is not a function
    at Object.<anonymous> (main.js:28:8)
    at Module._compile (module.js:624:30)
    at Object.Module._extensions..js (module.js:635:10)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Function.Module.runMain (module.js:665:10)
    at startup (bootstrap_node.js:187:16)
    at bootstrap_node.js:608:3

util.inspect() 方法

Node.js util.inspect() 方法可以将任意对象转换为字符串

util.inspect 方法通常用于调试和错误输出

语法

Node.js util.inspect 方法语法如下

util.inspect(object,[showHidden],[depth],[colors])

util.inspect 至少接受一个参数 object,即要转换的对象

util.inspect 并不会简单地直接把对象转换为字符串,即使该对象定义了 toString 方法也不会调用

参数列表

参数 说明
object 要转换的对象
showHidden 是一个可选参数,如果值为 true,将会输出更多隐藏信息
depth 表示最大递归的层数,如果对象很复杂,你可以指定层数以控制输出信息的多少。
如果不指定depth,默认会递归2层,指定为 null 表示将不限递归层数完整遍历对象
color 输出是否代码高亮
如果 color 值为 true,输出格式将会以 ANSI 颜色编码,通常用于在终端显示更漂亮 的效果

范例

这个范例将 Person 对象转换成字符串形式

main.js

/*
 * filename: main.js
 * author: DDKK.COM 弟弟快看,程序员编程资料站(ddkk.com)
 * Copyright © 2015-2065 ddkk.com. All rights reserved.
*/

var util = require('util'); 
function Person() { 
    this.name = 'byvoid'; 
    this.toString = function() { 
    return this.name; 
    }; 
} 
var obj = new Person(); 
console.log(util.inspect(obj)); 
console.log(util.inspect(obj, true));

运行以上 Node.js 脚本,输出结果如下

$ node main.js       
Person { name: 'byvoid', toString: [Function] }
Person {
  name: 'byvoid',
  toString: 
   { [Function]
     [length]: 0,
     [name]: '',
     [arguments]: null,
     [caller]: null,
     [prototype]: { [constructor]: [Circular] } } }

util.isArray() 方法

Node.js util.isArray 方法判断一个对象是否数组

语法

Node.js util.isArray 语法如下

util.isArray(object)

如果给定的参数 “object” 是一个数组返回 true,否则返回 false

范例

main.js

/*
 * filename: main.js
 * author: DDKK.COM 弟弟快看,程序员编程资料站(ddkk.com)
 * Copyright © 2015-2065 ddkk.com. All rights reserved.
*/

var util = require('util');

console.log(util.isArray(3.14159));         // false
console.log(util.isArray("Hello World"));         // false
console.log(util.isArray([])); // true
console.log(util.isArray(new Array));        // true
console.log(util.isArray({}));               // false

运行以上 Node.js 脚本,输出结果如下

$ node main.js
false
false
true
true
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

更多详情可以访问 http://nodejs.org/api/util.html 了解详细内容