首页is-type-of,one of the Top 100 most popular or depended-upon nodejs packages
Created At : 2021-12-3
Last Updated: 2021-12-3
is-type-of
作用
node环境下的类型检测工具模块
安装
npm install is-type-of
使用方式
var is = require('is-type-of');
// 是否是数组
is.array([1]); // => true
//是否是基本类型
is.primitive(true); // => true
is.primitive({}); // => false
//是否是generate 函数
is.generatorFunction(function * () {}); // => true
//是否是long类型
is.long(Math.pow(2, 33)); // => true
//是否是double类型
is.double(0); // => false
模块依赖
主要工具API
From core-util-is
is.array(arr)
is.boolean(bool)
is.null(null)
is.nullOrUndefined(null)
is.number(num)
is.string(str)
is.symbol(sym)
is.undefined(undef)
is.regExp(reg)
is.object(obj)
is.date(date)
is.error(err)
is.function(fn)
is.primitive(prim)
is.buffer(buf)
from is-stream
is.stream(stream)
is.readableStream(readable)
is.writableStream(writable)
is.duplexStream(duplex)
from is-class
is.class(obj)
Extend API
is.finite(num)
is.NaN(NaN)
is.generator(gen)
is.generatorFunction(fn)
is.promise(fn)
is.int(int)
is.double(double)
is.int32(int)
is.long(long)
is.Long(Long)
Support Long instance.
实战提示1
use(fn) {
assert(is.function(fn), 'app.use() requires a function');
debug('use %s', fn._name || fn.name || '-');
this.middleware.push(utils.middleware(fn));
return this;
}
以上代码摘自egg.js框架,即 中间件必须是一个函数
实战提示2
此模块虽然依赖于:
但是也扩展或重写一些方法。 而且,模块中所有方法都是通过 exports.name 直接导出的。 这样 var is = require('is-type-of');
后,可以通过is.name 直接使用
例如:
// 源码
var isClass = require('is-class');
exports.class = isClass;
// 使用方式
var is = require('is-type-of');
class F {}
function G() {}
console.log(is.class(F)); // true
console.log(is.class(G)); // false
实战提示3
万能的toString
我们知道jquery 源码中的type方法使用了toString 方法检测对象的类型。
// 部分源码,具体查看完整源码
function type( obj ) {
if ( obj == null ) {
return obj + "";
}
// Support: Android <=2.3 only (functionish RegExp)
return typeof obj === "object" || typeof obj === "function" ?
class2type[ toString.call( obj ) ] || "object" :
typeof obj;
}
}
其实toString,除了可以检测对象的类型,还可以检测 ES6中class 的类型, 而且适用于node和browser 环境
var objToString = Object.prototype.toString;
var fnToString = Function.prototype.toString;
function Log(str){
console.log(str);
}
class A {}
function B() {}
var C = [2,3];
var D = new Date();
Log(objToString.call(A));
Log(fnToString.call(A));
Log(objToString.call(B));
Log(fnToString.call(B));
Log(objToString.call(C));
Log(objToString.call(D));
// 输出结果如下:
// [object Function]
// class A {}
// [object Function]
// function B() {}
// [object Array]
// [object Date]
实战提示4
ES6 ,ES7中新增了generateor 函数和 async 函数,如何检测呢? 很简单,看源码:
exports.generatorFunction = function (obj) {
return obj
&& obj.constructor
&& 'GeneratorFunction' === obj.constructor.name;
};
exports.asyncFunction = function (obj) {
return obj
&& obj.constructor
&& 'AsyncFunction' === obj.constructor.name;
};