• 32.Node.js中的常用工具类util


    转自:http://www.runoob.com/nodejs/nodejs-module-system.html

    util是一个Node.js核心模块,提供常用函数的集合,用于弥补JavaScript的功能的不足,util模块设计的主要目的是为了满足Node内部API的需求。其中包括:格式化字符串、对象的序列化、实现对象继承等常用方法。要使用util模块中的方法,只需require('util')引入即可。

    1. 格式化输出字符串:util.format(format[, ...])
    2. 在控制台标准输出:util.log(string)
    3. 将对象序列化为字符串:util.inspect(object[, options])
    4. 检查对象是否是数组:util.isArray(object)
    5. 检查对象是否是RegExp类型:util.isRegExp(object)
    6. 检查对象是否是Date类型:util.isDate(object)
    7. 检查对象是否是Error类型:util.isError(object)
    8. 实现对象间原型继承:util.inherits(constructor, superConstructor)

    1. 格式化输出字符串:util.format(format[, ...])

    根据第一个参数,返回一个格式化字符串,类似printf的格式化输出。 传入的第一个参数是一个字符串,其中包含零个或多个占位符,format方法会将其中的每一个占位符被替换为与其对应的值后,输出结果。 format方法支持的占位符有:

    • %s - 字符串.
    • %d - 数字 (整型和浮点型).
    • %j - JSON. 如果这个参数包含循环对象的引用,将会被替换成字符串 '[Circular]'
    • %% - 单独一个百分号('%')。不会占用一个参数。

    format方法的几种使用示例:

    console.log(util.format('%s:%s', 'foo')); 	// foo:%s
    console.log(util.format('%s:%s:%d', 'foo', 'bar', 'baz'));  // foo:bar:NaN
    console.log(util.format(1, 2, 3));  // 1 2 3

    2. 在控制台标准输出:util.log(string)

    printf方法用于在控制台stdout输出,输出带有时间戳。

    util.log('这是一个stout输出');			//15 Jun 18:28:20 - 这是一个stout输出

    3. 将对象序列化为字符串:util.inspect(object[, options])

    inspect方法用于将对象序列化为字符串,这一方法在调试代码查看对象结构时非常有用。其可选参数可选值如下:

    • showHidden - 是否枚举显示对象的隐藏属性。默认为 false

    • depth - 设置对象枚举显示的深度。默认为2,设置为null时将无穷递归显示
    • colors - 如果设为true,将会以ANSI颜色代码风格进行输出。默认为 false
    • customInspect - 如果设为 false,那么定义在被检查对象上的inspect(depth, opts) 方法将不会被调用。 默认为true

    例如检查util对象的所有属性。代码如下:

    var util = require('util');
    
    console.log(util.inspect(util, { showHidden: true, depth: null }));

    3.1 自定义 util.inspect 颜色

    util.inspect属性用于自定义输出的颜色和样式,可以通过util.inspect.styles 和util.inspect.colors 属性设置。

    util.inspect.colors可定义的颜色有:whitegreyblackbluecyangreenmagentared 和 yellow

    util.inspect.styles可定义的样式有:bolditalicunderline 和 inverse

    3.2 自定义对象的 inspect() 方法

    对象可以定义自己的 inspect(depth)方法;当使用util.inspect()检查该对象的时,自定义的inspect(depth)方法将会被执行。使用示例如下:

    var util = require('util');
    
    var obj = { name: 'nate' };
    obj.inspect = function(depth) {
      return '{' + this.name + '}';
    };
    
    util.inspect(obj);
      // "{nate}"

    4. 检查对象是否是数组:util.isArray(object)

    isArray()方法用于检查传入对象是否是数据,isArray()方法会首先使用ECMAScript5中的Array.isArray()方法和typeof操作符等进行检查,以确保检查结果的正确性。几种使用示例如下:

    var util = require('util');
    
    util.isArray([])
      // true
    util.isArray(new Array)
      // true
    util.isArray({})
      // false

    5. 检查对象是否是RegExp类型:util.isRegExp(object)

    isRegExp方法用于检查对象是否是RegExp类型,即是否为正则表达式对象。几种使用示例如下:

    var util = require('util');
    
    util.isRegExp(/some regexp/)
      // true
    util.isRegExp(new RegExp('another regexp'))
      // true
    util.isRegExp({})
      // false

    6. 检查对象是否是Date类型:util.isDate(object)

    isDate方法用于检查对象是否是RegExp类型,即日期类型。几种使用示例如下:

    var util = require('util');
    
    util.isDate(new Date())
      // true
    util.isDate(Date())
      // false (without 'new' returns a String)
    util.isDate({})
      // false

    7. 检查对象是否是Error类型: util.isError(object)

    isError方法用于检查对象是否是Error类型。几种使用示例如下:

    var util = require('util');
    
    util.isError(new Error())
      // true
    util.isError(new TypeError())
      // true
    util.isError({ name: 'Error', message: 'an error occurred' })
      // false

    8. 实现对象间原型继承:util.inherits(constructor, superConstructor)

    util.inherits(constructor, superConstructor)是一个实现对象间原型继承的方法。JavaScript 的面向对象特性是基于原型的继承,与常见的基于类的不同,JavaScript 没有提供对象继承的语言级别特性,而是通过原型链复制来实现的。inherits方法可以将父类原型链上的方法复制到子类中,实现原型式继承。

    使用示例,实现一型式继承:

    var util = require("util");
    var events = require("events");
    
    //MyStream构造函数,在构造函数将this指向本对象
    function MyStream() {
        events.EventEmitter.call(this);
    }
    
    //复制父对象上所有的方法
    util.inherits(MyStream, events.EventEmitter);
    
    //对MyStream类添加原型方法
    MyStream.prototype.write = function(data) {
        this.emit("data", data);
    }
    
    var stream = new MyStream();
    
    //由于MyStream继承自EventEmitter,所以其实例stream是MyStream类的实例也是EventEmitter类的实例
    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模块中还有一些方法如:util.debug(string)util.puts([...])util.pump(readableStream, writableStream, [callback])等,但都不是稳定版本或已被其它方法替代,不再赘述。

  • 相关阅读:
    Codeforces Round #246 (Div. 2):B. Football Kit
    iOS8使用TouchID
    HDU 1796 How many integers can you find(容斥原理+二进制/DFS)
    MapReduce的Reduce side Join
    Android入门级编译错误汇总
    当往事已随风
    静态链表的C++实现
    《跨界杂谈》企业商业模式(三):集约
    C
    Android插屏动画效果
  • 原文地址:https://www.cnblogs.com/sharpest/p/8057279.html
Copyright © 2020-2023  润新知