UNPKG

@diyaner/ding

Version:

dingiyan常用ts/js工具

272 lines 6.54 kB
"use strict"; 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