util 是一個Node.js 核心模塊,提供常用函式的集合,用于彌補核心 JavaScript 的功能 過于精簡的不足,
使用方法如下:
const util=require("util");//引入util模塊
//定義一個異步函式
async function fn(){
return "hello cyy~";
}
//將異步函式轉為例外優先的回呼函式風格
const callbackFn=util.callbackify(fn);
callbackFn((err,res)=>{
if(err) throw err;
console.log(res);
})

const util=require("util");//引入util模塊
//定義一個異步函式
async function fn(){
return Promise.reject(null);
}
//將異步函式轉為例外優先
const callbackFn=util.callbackify(fn);
callbackFn((err,res)=>{
//null 在回呼函式中作為一個引數有其特殊的意義
//如果回呼函式的首個引數為 Promise 拒絕的原因且帶有回傳值,且值可以轉換成布林值 false
//這個值會被封裝在 Error 物件里,可以通過屬性 reason 獲取
err&&err.hasOwnProperty("reason")&&err.reason==="null";
})
不要問我這段代碼是干嘛的,我也不知道……
util.inherits(constructor, superConstructor) 是一個實作物件間原型繼承的函式,
const util=require("util");//引入util模塊
//基礎物件Base
function Base(){
// 通過建構式內定義的屬性和方法
this.name="cyy1.0";
this.say=function(){
console.log("hello "+this.name);
}
}
//通過原型定義的方法
Base.prototype.showName=function(){
console.log(this.name);
}
//繼承物件Sub
function Sub(){
this.name="cyy2.0";
}
util.inherits(Sub,Base);//讓Sub繼承自Base
//基礎物件Base的實體
var cbase=new Base();
cbase.say();//hello cyy1.0
cbase.showName();//cyy1.0
console.log(cbase);//Base { name: 'cyy1.0', say: [Function] }
//繼承物件Sub的實體
var csub=new Sub();
//csub.say();
csub.showName();//cyy2.0
console.log(csub);//Sub { name: 'cyy2.0' }
Sub 僅僅繼承了Base 在原型中定義的函式,而建構式內部創造的 base 屬 性和 sayHello 函式都沒有被 Sub 繼承,(node 版本 V10.8.0)
因此如果執行
csub.say();
結果會報錯:

util.inspect(object,[showHidden],[depth],[colors]) 是一個將任意物件轉換 為字串的方法,通常用于除錯和錯誤輸出,
它至少接受一個引數 object,即要轉換的物件,
showHidden 是一個可選引數,如果值為 true,將會輸出更多隱藏資訊,
depth 表示最大遞回的層數,如果物件很復雜,你可以指定層數以控制輸出資訊的多 少,如果不指定depth,默認會遞回 2 層,指定為 null 表示將不限遞回層數完整遍歷物件,
如果 colors 值為 true,輸出格式將會以 ANSI 顏色編碼,通常用于在終端顯示更漂亮 的效果,
特別要指出的是,util.inspect 并不會簡單地直接把物件轉換為字串,即使該對 象定義了 toString 方法也不會呼叫,
const util=require("util");//引入util模塊
function Person(){
this.name="cyy";
this.toString=function(){
return this.name;
}
}
var p=new Person();
console.log(util.inspect(p));//Person { name: 'cyy', toString: [Function] }
console.log(util.inspect(p,true));
// Person {
// name: 'cyy',
// toString: [Function] {
// [length]: 0,
// [name]: '',
// [arguments]: null,
// [caller]: null,
// [prototype]: { [constructor]: [Circular] }
// }
// }

util.isArray(object)
如果給定的引數 "object" 是一個陣列回傳 true,否則回傳 false,
const util=require("util");//引入util模塊
console.log(util.isArray([]));
console.log(util.isArray(new Array));
console.log(util.isArray({}));

util.isRegExp()
如果給定的引數 "object" 是一個正則運算式回傳true,否則回傳false,
const util=require("util");//引入util模塊
console.log(util.isRegExp(/\d/));
console.log(util.isRegExp(new RegExp("\d")));
console.log(util.isRegExp({}));

util.isDate()
如果給定的引數 "object" 是一個日期回傳true,否則回傳false,
const util=require("util");//引入util模塊
console.log(util.isDate(new Date()));
console.log(util.isDate(Date()));//如果沒有new,回傳的是string
console.log(util.isDate({}));

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/143003.html
標籤:JavaScript
上一篇:Node.js 全域物件
