用原生JS实现可靠的数据类型判断

在写代码时,总是有很多的地方要先判断数据类型,然后再进行其他操作,本文就用原生了js中常用的类型判断方法并,很方便在实际项目中封装后使用。

/**
 * @description 常用数据类型判断方法 baseUtils.js
 */
 
const ERROR_MISSING = 'params is not a {{msg}}';
const toString = Object.prototype.toString;
const hasOwnProperty = Object.prototype.hasOwnProperty;

/**
 * @description: 获取变量真实的类型值
 * @param {Any} variable 任意变量
 * @return {String} 该变量的类型
 */
export const getVariableType = (variable) => {
    return toString.call(variable).slice(8, -1);
};

/**
 * @description: 判断变量是否是对象
 * @param {Any} variable 任意变量
 * @return {Boolean} 该变量是否是对象
 */
export const isObject = (variable) => {
    return getVariableType(variable) === 'Object';
};

/**
 * @description: 判断变量是否是布尔值
 * @param {Any} variable 任意变量
 * @return {Boolean} 该变量是否是布尔值
 */
export const isBoolean = (variable) => {
    return getVariableType(variable) === 'Boolean';
};

/**
 * @description: 判断变量是否是字符串
 * @param {Any} variable 任意变量
 * @return {Boolean} 该变量是否是字符串
 */
export const isString = (variable) => {
    return getVariableType(variable) === 'String';
};

/**
 * @description: 判断变量是否是数组
 * @param {Any} variable 任意变量
 * @return {Boolean} 该变量是否是数组
 */
export const isArray = (variable) => {
    return getVariableType(variable) === 'Array';
};

/**
 * @description: 判断变量是否是数字
 * @param {Any} variable 任意变量
 * @return {Boolean} 该变量是否是数字
 */
export const isNumber = (variable) => {
    return getVariableType(variable) === 'Number' && !isNaN(variable);
};

/**
 * @description 判断变量是否是Map
 * @param {*} variable 任意变量
 * @returns {Boolean} 该变量是否是Map
 */
export const isMap = (variable) => {
    return getVariableType(variable) === 'Map';
};

/**
 * @description: 判断变量是否是空值
 * @param {Any} variable 任意变量
 * @return {Boolean} 该变量是否是空值
 */
export const isEmptyValue = (variable) => {
    return getVariableType(variable) === 'Undefined' || getVariableType(variable) === 'Null';
};

/**
 * @description: 判断是不是DOM元素集合
 * @param {Any} variable 任意变量
 * @return {Boolean} 该变量是否是DOM元素集合
 */
export const isHtmlCollection = (variable) => {
    return getVariableType(variable) === 'HTMLCollection';
};

/**
 * @description: 判断是不是DOM元素
 * @param {Any} variable 任意变量
 * @return {Boolean} 该变量是否是DOM元素
 */
export const isHtmlElement = (variable) => {
    let typeName = getVariableType(variable);
    typeName = typeName.slice(0, 4) + typeName.slice(-7);
    return typeName === 'HTMLElement' && variable.tagName && variable.nodeType === 1;
};

/**
 * @description: 检验DOM元素的真实性(假-抛出异常阻碍进程,真-往下执行)
 * @param {Any} variable 任意变量
 * @return 无返回
 */
export const checkHtmlElement = (variable) => {
    if (!isHtmlElement(variable)) {
        // 不是DOM元素抛出异常
        throw new TypeError(ERROR_MISSING.replace(/\{{(.+?)\}}/g, 'HTMLElement'));
    }
};

/**
 * @description: 判断变量是否是函数
 * @param {Any} variable 任意变量
 * @return {Boolean} 该变量是否是函数
 */
export const isFunction = (variable) => {
    return getVariableType(variable) === 'Function';
};

/**
 * @description: 判断变量是否是时间对象
 * @param {Any} variable 任意变量
 * @return {Boolean} 该变量是否是时间对象
 */
export const isDate = (variable) => {
    return getVariableType(variable) === 'Date';
};

希望能对你有所帮助~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

英子的搬砖日志

您的鼓励是我创作的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值