Module 基礎模塊

模塊util

常用工具模塊

對象

LruCache

LRU(least recently used) 緩存對象,參見 LruCache 對象。

1
LruCache util.LruCache;

靜態函數

format

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

1 2
static String util.format(String fmt, ...args);

調用參數:

  • fmt: String, 格式化字符串
  • args: ..., 可選參數列表

返回結果:

  • String, 返回格式化後的字符串

格式格式化變量

1
static String util.format(...args);

調用參數:

  • args: ..., 可選參數列表

返回結果:

  • String, 返回格式化後的字符串

inherits

從一個構造函數constructor 繼承原型函數到另一個。構造函數的原型將被設置為一個新的從超類(superConstructor)創建的對象。

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

調用參數:

  • constructor: Value, 初始的構造函數
  • superConstructor: Value, 被繼承的超類

inspect

函數返回obj 的字符串表示,主要用於調試。附加的options 可用於改變格式化字符串的某些方面。

1 2
static String util.inspect(Value obj, Object options = {});

調用參數:

  • obj: Value, 指定需要處理的對象
  • options: Object, 指定格式控制選項

返回結果:

  • String, 返回格式化後的字符串

支持以下參數:

1 2 3 4 5 6
{ "colors": false, // 指定是否输出 ansi 作色字符串,缺省为 false "table": false, // 指定输出 table 格式,缺省为 false "encode_string": true, // 指定表格中的字符串是否编码,缺省为 true "fields": [], // 当 table 为 true 时指定显示字段 }

deprecate

封裝給定的函數,本函數僅為兼容,並不輸出警告

1 2 3
static Function util.deprecate(Function fn, String msg, String code = "");

調用參數:

  • fn: Function, 給定需要封裝的函數
  • msg: String, 給定警告消息
  • code: String, 給定警告編號

返回結果:

  • Function, 如果封裝結果

isEmpty

檢測給定的變量是否不包含任何值(沒有可枚舉的屬性)

1
static Boolean util.isEmpty(Value v);

調用參數:

  • v: Value, 給定需要檢測的變量

返回結果:

  • Boolean, 如果為空則返回True

isArray

檢測給定的變量是否是數組

1
static Boolean util.isArray(Value v);

調用參數:

  • v: Value, 給定需要檢測的變量

返回結果:

  • Boolean, 如果是數組則返回True

isBoolean

檢測給定的變量是否是Boolean

1
static Boolean util.isBoolean(Value v);

調用參數:

  • v: Value, 給定需要檢測的變量

返回結果:

  • Boolean, 如果是Boolean 則返回True

isNull

檢測給定的變量是否是Null

1
static Boolean util.isNull(Value v);

調用參數:

  • v: Value, 給定需要檢測的變量

返回結果:

  • Boolean, 如果是Null 則返回True

isNullOrUndefined

檢測給定的變量是否是Null 或者Undefined

1
static Boolean util.isNullOrUndefined(Value v);

調用參數:

  • v: Value, 給定需要檢測的變量

返回結果:

  • Boolean, 如果是Null 或者Undefined 則返回True

isNumber

檢測給定的變量是否是數字

1
static Boolean util.isNumber(Value v);

調用參數:

  • v: Value, 給定需要檢測的變量

返回結果:

  • Boolean, 如果是數字則返回True

isBigInt

檢測給定的變量是否是BigInt

1
static Boolean util.isBigInt(Value v);

調用參數:

  • v: Value, 給定需要檢測的變量

返回結果:

  • Boolean, 如果是數字則返回True

isString

檢測給定的變量是否是字符串

1
static Boolean util.isString(Value v);

調用參數:

  • v: Value, 給定需要檢測的變量

返回結果:

  • Boolean, 如果是字符串則返回True

isUndefined

檢測給定的變量是否是Undefined

1
static Boolean util.isUndefined(Value v);

調用參數:

  • v: Value, 給定需要檢測的變量

返回結果:

  • Boolean, 如果是Undefined 則返回True

isRegExp

檢測給定的變量是否是正則對象

1
static Boolean util.isRegExp(Value v);

調用參數:

  • v: Value, 給定需要檢測的變量

返回結果:

  • Boolean, 如果是正則對象則返回True

isObject

檢測給定的變量是否是對象

1
static Boolean util.isObject(Value v);

調用參數:

  • v: Value, 給定需要檢測的變量

返回結果:

  • Boolean, 如果是對象則返回True

isDate

檢測給定的變量是否是日期對象

1
static Boolean util.isDate(Value v);

調用參數:

  • v: Value, 給定需要檢測的變量

返回結果:

  • Boolean, 如果是日期對象則返回True

isNativeError

檢測給定的變量是否是錯誤對象

1
static Boolean util.isNativeError(Value v);

調用參數:

  • v: Value, 給定需要檢測的變量

返回結果:

  • Boolean, 如果是錯誤對象則返回True

isPrimitive

檢測給定的變量是否是原始類型

1
static Boolean util.isPrimitive(Value v);

調用參數:

  • v: Value, 給定需要檢測的變量

返回結果:

  • Boolean, 如果是原始類型則返回True

isSymbol

檢測給定的變量是否是Symbol類型

1
static Boolean util.isSymbol(Value v);

調用參數:

  • v: Value, 給定需要檢測的變量

返回結果:

  • Boolean, 如果是Symbol類型則返回True

isDataView

檢測給定的變量是否是DataView 類型

1
static Boolean util.isDataView(Value v);

調用參數:

  • v: Value, 給定需要檢測的變量

返回結果:

  • Boolean, 如果是DataView 類型則返回True

isExternal

檢測給定的變量是否是External 類型

1
static Boolean util.isExternal(Value v);

調用參數:

  • v: Value, 給定需要檢測的變量

返回結果:

  • Boolean, 如果是External 類型則返回True

isMap

檢測給定的變量是否是Map 類型

1
static Boolean util.isMap(Value v);

調用參數:

  • v: Value, 給定需要檢測的變量

返回結果:

  • Boolean, 如果是Map 類型則返回True

isMapIterator

檢測給定的變量是否是MapIterator 類型

1
static Boolean util.isMapIterator(Value v);

調用參數:

  • v: Value, 給定需要檢測的變量

返回結果:

  • Boolean, 如果是MapIterator 類型則返回True

isPromise

檢測給定的變量是否是Promise 類型

1
static Boolean util.isPromise(Value v);

調用參數:

  • v: Value, 給定需要檢測的變量

返回結果:

  • Boolean, 如果是Promise 類型則返回True

isAsyncFunction

檢測給定的變量是否是AsyncFunction 類型

1
static Boolean util.isAsyncFunction(Value v);

調用參數:

  • v: Value, 給定需要檢測的變量

返回結果:

  • Boolean, 如果是AsyncFunction 類型則返回True

isSet

檢測給定的變量是否是Set 類型

1
static Boolean util.isSet(Value v);

調用參數:

  • v: Value, 給定需要檢測的變量

返回結果:

  • Boolean, 如果是Set 類型則返回True

isSetIterator

檢測給定的變量是否是SetIterator 類型

1
static Boolean util.isSetIterator(Value v);

調用參數:

  • v: Value, 給定需要檢測的變量

返回結果:

  • Boolean, 如果是SetIterator 類型則返回True

isTypedArray

檢測給定的變量是否是TypedArray 類型

1
static Boolean util.isTypedArray(Value v);

調用參數:

  • v: Value, 給定需要檢測的變量

返回結果:

  • Boolean, 如果是TypedArray 類型則返回True

isUint8Array

檢測給定的變量是否是Uint8Array 類型

1
static Boolean util.isUint8Array(Value v);

調用參數:

  • v: Value, 給定需要檢測的變量

返回結果:

  • Boolean, 如果是Uint8Array 類型則返回True

isFunction

檢測給定的變量是否是函數對象

1
static Boolean util.isFunction(Value v);

調用參數:

  • v: Value, 給定需要檢測的變量

返回結果:

  • Boolean, 如果是函數對象則返回True

isBuffer

檢測給定的變量是否是函數 Buffer 對象

1
static Boolean util.isBuffer(Value v);

調用參數:

  • v: Value, 給定需要檢測的變量

返回結果:

  • Boolean, 如果是函數 Buffer 對象則返回True

isDeepEqual

測試數值深度等於預期值

1 2
static Boolean util.isDeepEqual(Value actual, Value expected);

調用參數:

  • actual: Value, 要測試的數值
  • expected: Value, 預期的數值

返回結果:

  • Boolean, 如果深度相等則返回True

has

查詢指定對像是否包含給定的鍵

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

調用參數:

  • v: Value, 給定需要查詢的對象
  • key: String, 指定需要查詢的鍵

返回結果:

  • Boolean, 返回對象的全部鍵數組

keys

查詢指定對象的全部鍵數組

1
static Array util.keys(Value v);

調用參數:

  • v: Value, 給定需要查詢的對象

返回結果:

  • Array, 返回對象的全部鍵數組

values

查詢指定對象的全部值數組

1
static Array util.values(Value v);

調用參數:

  • v: Value, 給定需要查詢的對象

返回結果:

  • Array, 返回對象的全部值數組

clone

克隆給定變量,如果是對像或數組,則復制內容到新對象

1
static Value util.clone(Value v);

調用參數:

  • v: Value, 給定要克隆的變量

返回結果:

  • Value, 返回克隆結果

deepFreeze

深度凍結一個對象,被凍結後的對象及其包含的對像都將不允許修改

1
static util.deepFreeze(Value v);

調用參數:

  • v: Value, 指定要凍結的對象

extend

將一個或者多個對象的鍵值擴展到指定對象

1 2
static Value util.extend(Value v, ...objs);

調用參數:

  • v: Value, 指定要擴展的對象
  • objs: ..., 指定一個或者多個用於擴展的對象

返回結果:

  • Value, 返回擴展的結果

_extend

將一個或者多個對象的鍵值擴展到指定對象,是extend 的別名

1 2
static Value util._extend(Value v, ...objs);

調用參數:

  • v: Value, 指定要擴展的對象
  • objs: ..., 指定一個或者多個用於擴展的對象

返回結果:

  • Value, 返回擴展的結果

pick

返回一個object副本,只過濾出指定鍵的屬性值

1 2
static Object util.pick(Value v, ...objs);

調用參數:

  • v: Value, 指定要過濾的對象
  • objs: ..., 指定一個或者多個用於選擇的鍵

返回結果:

  • Object, 返回過濾的結果

omit

返回一個object副本,只過排除指定鍵的屬性值

1 2
static Object util.omit(Value v, ...keys);

調用參數:

  • v: Value, 指定要過濾的對象
  • keys: ..., 指定一個或者多個用於排除的鍵

返回結果:

  • Object, 返回排除的結果

first

獲取數組的第一個元素

1
static Value util.first(Value v);

調用參數:

  • v: Value, 給定要獲取的數組

返回結果:

  • Value, 返回獲取的元素

獲取數組的開始多個元素

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

調用參數:

  • v: Value, 給定要獲取的數組
  • n: Integer, 指定要獲取的元素個數

返回結果:

  • Value, 返回獲取的元素數組

last

獲取數組的第後一個元素

1
static Value util.last(Value v);

調用參數:

  • v: Value, 給定要獲取的數組

返回結果:

  • Value, 返回獲取的元素

獲取數組的結尾多個元素

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

調用參數:

  • v: Value, 給定要獲取的數組
  • n: Integer, 指定要獲取的元素個數

返回結果:

  • Value, 返回獲取的元素數組

unique

獲取數組的元素去重後的副本

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

調用參數:

  • v: Value, 給定要去重的數組
  • sorted: Boolean, 指定數組是否排序,如果指定數組排序,將使用快速算法

返回結果:

  • Array, 返回去重元素後的數組

union

將一個或者多個數組的值合併成一個值唯一的數組

1
static Array util.union(...arrs);

調用參數:

  • arrs: ..., 指定一個或者多個用於合併的數組

返回結果:

  • Array, 返回合併的結果

intersection

返回一個包含arr 數組中排除一個或者多個數組元素的交集

1
static Array util.intersection(...arrs);

調用參數:

  • arrs: ..., 指定一個或者多個用於計算交集的數組

返回結果:

  • Array, 返回計算交集的結果

flatten

將一個嵌套多層的數組(嵌套可以是任何層數)轉換為只有一層的數組。如果你傳遞shallow 參數,數組將只減少一維的嵌套。

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

調用參數:

  • arr: Value, 指定需要轉換的數組
  • shallow: Boolean, 指定是否只減少一維的嵌套,缺省為false

返回結果:

  • Array, 返迴轉換的結果

without

返回一個包含arr 數組中排除一個或者多個元素後的數組

1 2
static Array util.without(Value arr, ...els);

調用參數:

  • arr: Value, 指定需要排除的數組
  • els: ..., 指定一個或者多個用於排除的元素

返回結果:

  • Array, 返回排除的結果

difference

返回一個包含arr 數組中排除without 數組元素之後的數組

1 2
static Array util.difference(Array list, ...arrs);

調用參數:

  • list: Array, 指定需要排除的數組
  • arrs: ..., 指定用於排除的一個或者多個數組

返回結果:

  • Array, 返回排除的結果

each

遍歷list 中的所有元素,按順序用遍歷輸出每個元素。如果傳遞了context 參數,則把iterator 綁定到context 對像上。每次調用iterator 都會傳遞三個參數:(element, index, list)

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

調用參數:

  • list: Value, 指定需要遍歷的列表或對象
  • iterator: Function, 指定用於遍歷的回調函數
  • context: Value, 指定調用iterator 時綁定的context 對象

返回結果:

  • Value, 返回list 本身

map

通過變換函數(iterator迭代器)把list 中的每個值映射到一個新的數組中。如果傳遞了context 參數,則把iterator 綁定到context 對像上。每次調用iterator 都會傳遞三個參數:(element, index, list)

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

調用參數:

  • list: Value, 指定需要變換的列表或對象
  • iterator: Function, 指定用於變換的回調函數
  • context: Value, 指定調用iterator 時綁定的context 對象

返回結果:

  • Array, 返回變換的結果

reduce

把list中元素歸結為一個單獨的數值。如果傳遞了context 參數,則把iterator 綁定到context 對像上。每次調用iterator 都會傳遞三個參數:(memo, element, index, list)

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

調用參數:

  • list: Value, 指定需要歸結的列表或對象
  • iterator: Function, 指定用於歸結的回調函數
  • memo: Value, 指定歸結的初始值
  • context: Value, 指定調用iterator 時綁定的context 對象

返回結果:

  • Value, 返回歸結的結果

parseArgs

解析命令行字符串返回參數列表

1
static NArray util.parseArgs(String command);

調用參數:

  • command: String, 指定要解析的命令行字符串

返回結果:

  • NArray, 返回解析出的參數列表

compile

編譯腳本為二進制代碼

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

調用參數:

  • srcname: String, 指定要添加的腳本名稱
  • script: String, 指定要編譯的腳本代碼
  • mode: Integer, 編譯模式,0: module, 1: script, 2: worker,缺省為 0

返回結果:

  • Buffer, 返回編譯出的二進制代碼

util.compile可以將腳本編譯為v8 內部運行數據塊(非機器執行代碼)。編譯以後的代碼,保存為*.jsc 後,可以由run 和require 直接加載執行。

由於編譯之後,目標代碼將不能逆向獲取源代碼,依賴於Function.toString 的程序將不能正常運行。


sync

包裹callback 或async 函數為同步調用

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

調用參數:

  • func: Function, 給定需要包裹的函數
  • async_func: Boolean, 指定以async 函數方式處理func,為false 則自動判斷

返回結果:

  • Function, 返回同步運行的函數

util.sync 將callback 函數或者async 函數處理為sync 函數,以方便調用。

callback 示例如下:

1 2 3 4 5 6 7 8 9 10 11
// 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 示例如下:

1 2 3 4 5 6 7 8 9
// 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 模式:

1 2 3 4 5 6 7 8 9 10 11
// 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));

promisify

包裹callback 函數為async 調用

1
static Function util.promisify(Function func);

調用參數:

  • func: Function, 給定需要包裹的函數

返回結果:

  • Function, 返回async 函數

util.promisify 將callback 函數處理為async 函數,以方便調用。

callback 示例如下:

1 2 3 4 5 6 7 8 9 10 11
// callback var util = require('util'); function cb_test(a, b, cb) { setTimeout(() => { cb(null, a + b); }, 100); } var fn_sync = util.promisify(cb_test); console.log(async fn_sync(100, 200));

callbackify

包裹async 函數為callback 調用

1
static Function util.callbackify(Function func);

調用參數:

  • func: Function, 給定需要包裹的函數

返回結果:

  • Function, 返回callback 函數

util.callbackify 將async 函數處理為callback 函數,以方便調用。

async 示例如下:

1 2 3 4 5 6 7 8 9 10 11 12
// async var util = require('util'); async function async_test(a, b) { return a + b; } var fn_callback = util.callbackify(async_test); fn_callback(100, 200, (err, result) => { console.log(result); });

buildInfo

查詢當前引擎及各組件版本信息

1
static Object util.buildInfo();

返回結果:

  • Object, 返回組件版本對象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
{ "fibjs": "0.25.0", "clang": "9.1", "date": "Jun 12 2018 07:22:40", "vender": { "ev": "4.24", "expat": "2.2.5", "gd": "2.2.4", "jpeg": "8.3", "leveldb": "1.17", "mongo": "0.7", "pcre": "8.21", "png": "1.5.4", "mbedtls": "2.6.1", "snappy": "1.1.2", "sqlite": "3.23.0", "tiff": "3.9.5", "uuid": "1.6.2", "v8": "6.7.288.20", "v8-snapshot": true, "zlib": "1.2.7", "zmq": "3.1" } }