@diyaner/ding
Version:
dingiyan常用ts/js工具
272 lines • 6.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.enumTypes = void 0;
/*
* @copyright: Huang Ding
* @Author: ding-cx
* @Date: 2021-02-01 16:28:58
* @LastEditors: ding
* @LastEditTime: 2022-09-12 16:13:00
* @Description: 类型检查,空检查等工具。
*/
var enumTypes;
(function (enumTypes) {
enumTypes["string"] = "string";
enumTypes["number"] = "number";
enumTypes["array"] = "array";
enumTypes["object"] = "object";
enumTypes["function"] = "function";
enumTypes["date"] = "date";
enumTypes["boolean"] = "boolean";
enumTypes["Infinity"] = "Infinity";
enumTypes["-Infinity"] = "-Infinity";
enumTypes["NaN"] = "NaN";
enumTypes["null"] = "null";
enumTypes["undefined"] = "undefined";
})(enumTypes || (exports.enumTypes = enumTypes = {}));
/**
*检查类型,可返回类型字符串。也可自行传入字符串对比后返回boolean
*
* @param {*} val
* @param {dyutils.types} [target]
* @return {*} {boolean}
*/
function is_type(val, target) {
var ty = typeof val;
var temp = {
"[object Array]": "array",
"[object Object]": "object",
"[object Number]": "number",
"[object Boolean]": "boolean",
"[object String]": "string",
"[object Date]": "date",
};
var toStr = Object.prototype.toString.call(val);
var ret;
if (val === null) {
ret = "null";
}
else if (val === undefined) {
ret = "undefined";
}
else if (ty === "object") {
ret = temp[toStr]; //object对象,返回temp中的对应值
}
else {
if (val.toString() === "NaN") {
//NaN特殊数值
ret = "NaN";
}
else if (val.toString() === "Infinity") {
//无限大数值
ret = "Infinity";
}
else if (val.toString() === "-Infinity") {
//无限小数值
ret = "-Infinity";
}
else {
ret = ty; //其他基本类型返回number,string,function,boolean
}
}
if (target && typeof target === "string") {
return ret === target;
}
else {
return ret;
}
}
/**
*instanceof 检查。
*
* @param {*} val 需检查的值。
* @param {Function} clzss 类
* @return {boolean} {boolean}
*/
function instanceofObject(val, clzss) {
return val instanceof clzss;
}
/**
*是否字符串
*
* @param {*} val
* @return {*} {boolean}
*/
function is_string(val) {
return is_type(val, enumTypes.string);
}
/**
*是否数值
*
* @param {*} num
* @return {*} {boolean}
*/
function is_number(num) {
const r = is_type(num, enumTypes.number) || is_type(num, enumTypes.NaN) || is_type(num, enumTypes["-Infinity"]) || is_type(num, enumTypes.Infinity);
return r;
}
/**
*判断是否是NaN。非有效数值即为true.正常数值和正负无穷之外的均为true。
*与js内置isNaN不同,它将能Number转化的值,如'',true,false,[]等都视为false
*
* @param {*} num
* @return {*} {boolean}
*/
function is_NaN(num) {
if (num === "")
return true;
if (is_boolean(num))
return true;
if (is_array(num))
return true;
return Number(num).toString() === "NaN";
}
/**
*是否对象
*
* @param {*} val
* @return {*} {boolean}
*/
function is_object(val) {
return is_type(val, enumTypes.object);
}
/**
*是否数组
*
* @param {*} val
* @return {*} {boolean}
*/
function is_array(val) {
if (Array.isArray) {
return Array.isArray(val);
}
return Object.prototype.toString.call(val) === "[object Array]";
}
/**
*是否函数
*
* @param {*} val
* @return {*} {boolean}
*/
function is_function(val) {
return is_type(val, enumTypes.function);
}
/**
*是否boolean
*
* @param {*} val
* @return {*} {boolean}
*/
function is_boolean(val) {
return is_type(val, enumTypes.boolean);
}
/**
*是否日期。可判断字符串是否可转为日期对象,和是否是日期对象。
*
* @param {*} val
* @return {*} {boolean}
*/
function is_date(val) {
if (is_type(val, enumTypes.string)) {
return new Date(val).toString() !== "Invalid Date";
}
else {
return instanceofObject(val, Date);
}
}
/**
*判断是否null
*
* @param {*} val
* @return {*} {boolean}
*/
function is_null(val) {
return val === null;
}
/**
*判断是否undefined
*
* @param {*} val
* @return {*} {boolean}
*/
function is_undefined(val) {
return val === undefined;
}
/**
*判断是否为空。只判断string,array,object是否为空。
*
* @template T
* @param {(string | Array<T> | Object)} val
* @return {*} {boolean}
*/
function is_empty(val) {
if (is_string(val)) {
return val === "";
}
else if (is_array(val)) {
return val.length === 0;
}
else if (is_object(val)) {
return Object.keys(val).length === 0;
}
else {
throw new Error("is_empty只判断string,array,object是否为空。");
}
}
/**
*通常可用!!转为boolean。但is_false认为空数组和空对象均为false。返回true。
*
* @param {*} val
* @return {*}
*/
function is_false(val) {
return val === false || is_empty(val) || is_null(val) || is_undefined(val);
}
function is_class(fn) {
var toString = Function.prototype.toString;
function fnBody(fn) {
return toString
.call(fn)
.replace(/^[^{]*{\s*/, "")
.replace(/\s*}[^}]*$/, "");
}
function is_class(fn) {
return (typeof fn === "function" && (/^class(?:\s|{)/.test(toString.call(fn)) || /^.*classCallCheck\(/.test(fnBody(fn))) // babel.js
);
}
return is_class(fn);
}
function is_generator(obj) {
return obj && "function" === typeof obj.next && "function" === typeof obj.throw;
}
function is_generator_function(obj) {
return obj && obj.constructor && "GeneratorFunction" === obj.constructor.name;
}
function is_async_function(obj) {
return obj && obj.constructor && "AsyncFunction" === obj.constructor.name;
}
function is_promise(obj) {
return obj && "function" === typeof obj.then;
}
exports.default = {
is_type,
instanceofObject,
is_string,
is_number,
is_NaN,
is_object,
is_array,
is_function,
is_boolean,
is_date,
is_null,
is_undefined,
is_empty,
is_false,
is_class,
is_async_function,
is_generator,
is_generator_function,
is_promise,
};
//# sourceMappingURL=type.js.map