模块 util

常用工具模块

对象

Stats

数据统计对象,用以构建应用运行时数据收集,参见 Stats 对象。

Stats util.Stats;

LruCache

LRU(least recently used) 缓存对象,参见 LruCache 对象。

LruCache util.LruCache;

静态函数

format

按照指定的格式格式化变量

static String util.format(String fmt,
    ...);

调用参数:

返回结果:


格式格式化变量

static String util.format(...);

调用参数:

返回结果:


inherits

从一个构造函数 constructor 继承原型方法到另一个。构造函数的原型将被设置为一个新的从超类(superConstructor)创建的对象。

static util.inherits(Value constructor,
    Value superConstructor);

调用参数:


isEmpty

检测给定的变量是否不包含任何值(没有可枚举的属性)

static Boolean util.isEmpty(Value v);

调用参数:

返回结果:


isArray

检测给定的变量是否是数组

static Boolean util.isArray(Value v);

调用参数:

返回结果:


isBoolean

检测给定的变量是否是 Boolean

static Boolean util.isBoolean(Value v);

调用参数:

返回结果:


isNull

检测给定的变量是否是 Null

static Boolean util.isNull(Value v);

调用参数:

返回结果:


isNullOrUndefined

检测给定的变量是否是 Null 或者 Undefined

static Boolean util.isNullOrUndefined(Value v);

调用参数:

返回结果:


isNumber

检测给定的变量是否是数字

static Boolean util.isNumber(Value v);

调用参数:

返回结果:


isString

检测给定的变量是否是字符串

static Boolean util.isString(Value v);

调用参数:

返回结果:


isUndefined

检测给定的变量是否是 Undefined

static Boolean util.isUndefined(Value v);

调用参数:

返回结果:


isRegExp

检测给定的变量是否是正则对象

static Boolean util.isRegExp(Value v);

调用参数:

返回结果:


isObject

检测给定的变量是否是对象

static Boolean util.isObject(Value v);

调用参数:

返回结果:


isDate

检测给定的变量是否是日期对象

static Boolean util.isDate(Value v);

调用参数:

返回结果:


isNativeError

检测给定的变量是否是错误对象

static Boolean util.isNativeError(Value v);

调用参数:

返回结果:


isPrimitive

检测给定的变量是否是原始类型

static Boolean util.isPrimitive(Value v);

调用参数:

返回结果:


isSymbol

检测给定的变量是否是Symbol类型

static Boolean util.isSymbol(Value v);

调用参数:

返回结果:


isDataView

检测给定的变量是否是 DataView 类型

static Boolean util.isDataView(Value v);

调用参数:

返回结果:


isExternal

检测给定的变量是否是 External 类型

static Boolean util.isExternal(Value v);

调用参数:

返回结果:


isMap

检测给定的变量是否是 Map 类型

static Boolean util.isMap(Value v);

调用参数:

返回结果:


isMapIterator

检测给定的变量是否是 MapIterator 类型

static Boolean util.isMapIterator(Value v);

调用参数:

返回结果:


isPromise

检测给定的变量是否是 Promise 类型

static Boolean util.isPromise(Value v);

调用参数:

返回结果:


isAsyncFunction

检测给定的变量是否是 AsyncFunction 类型

static Boolean util.isAsyncFunction(Value v);

调用参数:

返回结果:


isSet

检测给定的变量是否是 Set 类型

static Boolean util.isSet(Value v);

调用参数:

返回结果:


isSetIterator

检测给定的变量是否是 SetIterator 类型

static Boolean util.isSetIterator(Value v);

调用参数:

返回结果:


isTypedArray

检测给定的变量是否是 TypedArray 类型

static Boolean util.isTypedArray(Value v);

调用参数:

返回结果:


isUint8Array

检测给定的变量是否是 Uint8Array 类型

static Boolean util.isUint8Array(Value v);

调用参数:

返回结果:


isFunction

检测给定的变量是否是函数对象

static Boolean util.isFunction(Value v);

调用参数:

返回结果:


isBuffer

检测给定的变量是否是函数 Buffer 对象

static Boolean util.isBuffer(Value v);

调用参数:

返回结果:


has

查询指定对象是否包含给定的键

static Boolean util.has(Value v,
    String key);

调用参数:

返回结果:


keys

查询指定对象的全部键数组

static Array util.keys(Value v);

调用参数:

返回结果:


values

查询指定对象的全部值数组

static Array util.values(Value v);

调用参数:

返回结果:


clone

克隆给定变量,如果是对象或数组,则复制内容到新对象

static Value util.clone(Value v);

调用参数:

返回结果:


extend

将一个或者多个对象的键值扩展到指定对象

static Value util.extend(Value v,
    ...);

调用参数:

返回结果:


pick

返回一个object副本,只过滤出指定键的属性值

static Object util.pick(Value v,
    ...);

调用参数:

返回结果:


omit

返回一个object副本,只过排除指定键的属性值

static Object util.omit(Value v,
    ...);

调用参数:

返回结果:


first

获取数组的第一个元素

static Value util.first(Value v);

调用参数:

返回结果:


获取数组的开始多个元素

static Value util.first(Value v,
    Integer n);

调用参数:

返回结果:


last

获取数组的第后一个元素

static Value util.last(Value v);

调用参数:

返回结果:


获取数组的结尾多个元素

static Value util.last(Value v,
    Integer n);

调用参数:

返回结果:


unique

获取数组的元素去重后的副本

static Array util.unique(Value v,
    Boolean sorted = false);

调用参数:

返回结果:


union

将一个或者多个数组的值合并成一个值唯一的数组

static Array util.union(...);

调用参数:

返回结果:


intersection

返回一个包含 arr 数组中排除一个或者多个数组元素的交集

static Array util.intersection(...);

调用参数:

返回结果:


flatten

将一个嵌套多层的数组(嵌套可以是任何层数)转换为只有一层的数组。 如果你传递 shallow 参数,数组将只减少一维的嵌套。

static Array util.flatten(Value arr,
    Boolean shallow = false);

调用参数:

返回结果:


without

返回一个包含 arr 数组中排除一个或者多个元素后的数组

static Array util.without(Value arr,
    ...);

调用参数:

返回结果:


difference

返回一个包含 arr 数组中排除 without 数组元素之后的数组

static Array util.difference(Array list,
    ...);

调用参数:

返回结果:


each

遍历 list 中的所有元素,按顺序用遍历输出每个元素。如果传递了 context 参数,则把 iterator 绑定到 context 对象上。每次调用 iterator 都会传递三个参数:(element, index, list)

static Value util.each(Value list,
    Function iterator,
    Value context = undefined);

调用参数:

返回结果:


map

通过变换函数(iterator迭代器)把 list 中的每个值映射到一个新的数组中。如果传递了 context 参数,则把 iterator 绑定到 context 对象上。每次调用 iterator 都会传递三个参数:(element, index, list)

static Array util.map(Value list,
    Function iterator,
    Value context = undefined);

调用参数:

返回结果:


reduce

把 list中 元素归结为一个单独的数值。如果传递了 context 参数,则把 iterator 绑定到 context 对象上。每次调用 iterator 都会传递三个参数:(memo, element, index, list)

static Value util.reduce(Value list,
    Function iterator,
    Value memo,
    Value context = undefined);

调用参数:

返回结果:


compile

编译脚本为二进制代码

static Buffer util.compile(String srcname,
    String script,
    Integer mode = 0);

调用参数:

返回结果:

util.compile 可以将脚本编译为 v8 内部运行数据块(非机器执行代码)。编译以后的代码,保存为 *.jsc 后,可以由 run 和 require 直接加载执行。

由于编译之后,目标代码将不能逆向获取源代码,依赖于 Function.toString 的程序将不能正常运行。


sync

包裹 callback 或 async 方法为同步调用

static Function util.sync(Function func,
    Boolean async_func = false);

调用参数:

返回结果:

util.sync 将 callback 方法或者 async 方法处理为 sync 方法,以方便调用。

callback 示例如下:

// callback
var util = require('util');

function cb_test(a, b, cb) {
    setTimeout(() => {
        cb(null, a + b);
    }, 100);
}

var fn_sync = util.sync(cb_test);
console.log(fn_sync(100, 200));

async 示例如下:

// async/await
var util = require('util');

async function async_test(a, b) {
    return a + b;
}

var fn_sync = util.sync(async_test);
console.log(fn_sync(100, 200));

对于未标记为 async 的返回 promise 的函数,可以手动指定 sync 模式:

// async/await
var util = require('util');

function async_test(a, b) {
    return new Promise(function(resolve, reject) {
        resolve(a + b);
    });
}

var fn_sync = util.sync(async_test, true);
console.log(fn_sync(100, 200));

buildInfo

查询当前引擎及各组件版本信息

static Object util.buildInfo();

返回结果:

{
    "fibjs": "0.1.0",
    "svn": 1753,
    "build": "Dec 10 2013 21:44:17",
    "vender": {
        "ev": "4.11",
        "exif": "0.6.21",
        "gd": "2.1.0-alpha",
        "jpeg": "8.3",
        "log4cpp": "1.0",
        "mongo": "0.7",
        "pcre": "8.21",
        "png": "1.5.4",
        "sqlite": "3.8.1",
        "tiff": "3.9.5",
        "uuid": "1.6.2",
        "v8": "3.23.17 (candidate)",
        "zlib": "1.2.7",
        "zmq": "3.1"
    }
}