资讯专栏INFORMATION COLUMN

javascript中类型判断一般见解,更新一个工具库

duan199226 / 1840人阅读

摘要:类型判断在中,核心给我们提供了方法来判断一个变量的类型,返回的是字符串型,但是对于数组,或者对象和函数,我们就没有什么办法了。更新一个类型判断的插件代码扩展工具

javascript类型判断
在js中,核心给我们提供了typeof方法来判断一个变量的类型,返回的是字符串型,但是对于数组,或者对象和函数,我们就没有什么办法了。但是我们可以引用对象也就是Object的toString方法来实现对类型的判断,例:
  

例子

var arr = [];
    console.log(typeof arr);//object
    console.log(Object.prototype.toString.call(arr));//[object Array]

Ps:对于数组而言,arr的typeof后的类型是Object,这并不是我们想要的,而用Object的toString方法来说就很明确的可以判断出是什么类型的了,但是[object Array]这种形式,我们不好在程序里面来处理,所以本人在日常工作中封装了一个简单的方法来返回出类型的字符串,例:

  

例子

function getType(ele){
    if(!ele)return undefined;
    var type = Object.prototype.toString.call(ele),
    reg = /[object (.*)]/,
    arr = reg.exec(type);
    return arr[1];
}

Ps:这样就返回了一个字符串形式的类型,可以返回String,Number,Bloolen,Function,Array,Object,undefined,Null这几个字符串,那么在程序中就好判断了。

更新一个类型判断的插件
  

代码

var Type = (function() {
    var Type = function() {
        if (!this instanceof Type) {
            return new Type();
        }
    };

    var menth = {
        version: "v1.0",
        getType: function(ele) {
            if (window == document && document != window) {
                return "window";
            } else if (ele.nodeType === 9) {
                return "document";
            } else if (ele.callee) {
                return "arguments";
            } else if (isFinite(ele.length) && ele.item) {
                return "NodeList";
            } else {
                var type = Object.prototype.toString.call(ele),
                    reg = /[object (.*)]/,
                    arr = reg.exec(type);
                return arr[1];
            }
        },
        isArray : function(ele){
            return (this.getType(ele) === "Array") ? true : false;
        },
        isFunction : function(ele){
            return (this.getType(ele) === "Function") ? true : false;
        },
        isObject : function(ele){
            return (this.getType(ele) === "Object") ? true : false;
        },
        isString : function(ele){
            return (this.getType(ele) === "String") ? true : false;
        },
        isNumber : function(ele){
            return (this.getType(ele) === "Number") ? true : false;
        },
        isBoolen : function(ele){
            return (this.getType(ele) === "Boolean") ? true : false;
        },
        isUndefined : function(ele){
            return (this.getType(ele) === "Undefined") ? true : false;
        },
        isNull : function(ele){
            return (this.getType(ele) === "Null") ? true : false;
        }
    }
    Type = extendDeep(Type.prototype,menth);



    // 扩展工具
    function extendDeep() {
            var i,
                target = arguments[0] || {},
                astr = "[object Array]",
                toStr = Object.prototype.toString,
                yArr = Array.prototype.slice.call(arguments, 1);
            for (i = 0, len = yArr.length; i < len; i++) {
                var temp = yArr[i];
                for (var j in temp) {
                    if (target.hasOwnProperty(j) && (target[i] === temp[i])) {
                        continue;
                    }
                    if (temp.hasOwnProperty(j)) {
                        if (typeof temp[j] === "object") {
                            target[j] = (toStr.call(temp[j] === astr)) ? [] : {};
                            extendDeep(target[j], temp[j]);
                        } else {
                            if (typeof temp[j] !== "undefined") {
                                target[j] = temp[j];
                            }
                        }
                    }
                }
            }

            return target;
        }
console.log(Type)
    return Type;
})();

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/87661.html

相关文章

  • 关于JavaScript, NPM官方发布了2018年的回顾以及2019年的预测

    摘要:不过,根据伯克利大学的这篇文章来看,拥有丰富的开源库,是开发者在选择一门开发语言时,最重要的因素。拥有超过个可用的开源库,是目前世界上最大的开源库集合。月份,我们发布了。这和年的情况是相反的。在的调查中,超过的受访者表示他们正在使用。 showImg(https://segmentfault.com/img/bVblvke?w=693&h=300); 原文标题:This year in...

    dadong 评论0 收藏0
  • Flow, 一个新的Javascript静态类型检查器

    摘要:原文链接翻译于今天我们兴奋的发布了的尝鲜版,一个新的静态类型检查器。为添加了静态类型检查,以提高开发效率和代码质量。这最终形成一个高度并行增量式的检查架构,类似。知道缩小类型范围时做动态检查的影响。 原文链接:https://code.facebook.com/posts/1505962329687926/flow-a-new-static-type-checker-for-java...

    liangzai_cool 评论0 收藏0
  • utilscoreJS 前端业务代码工具(不定时更新)

    摘要:前端业务代码工具库不定时更新目的高效率完成前端业务代码业务开发过程中,会经常用到扩展方法浏览器类型判断表单验证常用方法等常用函数,为避免不同项目多次复制粘贴的麻烦,这里统一封装,并发布到,以提高开发效率。 utilscoreJS 前端业务代码工具库(不定时更新) 目的:高效率完成前端业务代码 业务开发过程中,会经常用到String,Number,Array,Object,Functio...

    Kosmos 评论0 收藏0
  • FCC 成都社区·技术周刊 第 12 期

    摘要:详情怎样规避地狱作者先介绍什么是地狱,以及在开发过程中怎样去规避地狱,一时爽性能问题火葬场。详情其他亮点汇总开发者大会已于北京时间月日凌晨在美国山景城正式启幕。 【前端】 1. JavaScript 的新数据类型:BigInt BigInt 是 JavaScript 中的一个新的数字基本(primitive)类型,可以用任意精度表示整数。使用 BigInt 可以安全地存储和操作大整数,...

    fanux 评论0 收藏0
  • FCC 成都社区·技术周刊 第 12 期

    摘要:详情怎样规避地狱作者先介绍什么是地狱,以及在开发过程中怎样去规避地狱,一时爽性能问题火葬场。详情其他亮点汇总开发者大会已于北京时间月日凌晨在美国山景城正式启幕。 【前端】 1. JavaScript 的新数据类型:BigInt BigInt 是 JavaScript 中的一个新的数字基本(primitive)类型,可以用任意精度表示整数。使用 BigInt 可以安全地存储和操作大整数,...

    zzbo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<