美文网首页
js中检测数据类型总结

js中检测数据类型总结

作者: 海洋lisle | 来源:发表于2017-04-07 15:02 被阅读0次

    有以下几种方法,前三种比较常用。第三种是最好的。

    • typeof
    • instanceof
    • Object.prototype.toString()
    • constructor
    • duck type

    typeof

    typeof非常适合函数对象 和基本数据类型的判断

    typeof 100          //'number'
    typeof true         //'boolean'
    typeof function     //'function'
    typeof undefined    //'undefined'
    typeof null         //'object'
    typeof NaN          // 'number'
    typeof new Object() //'object'
    typeof new String("123")    //'object'
    

    instanceof

    主要用于判断对象数据类型;object instanceof Object,左边必须是对象,否则返回false;右边必须是函数对象,或函数构造器,否则报错。

    用来判断左边对象的原型链上是否有右边这个构造器;

    [1,2,3] instanceof Array //true
    new Object instanceof Array //false
    '123' instanceof String     //false
    new String('hi') instanceof String //true
    

    注意:

    • 跨iframe和跨window不可以用instanceof
    • 无法检测null

    Object.prototype.toString

    Object.prototype.toString.apply([]) === "[object Array]"
    Object.prototype.toString.apply(function(){}) === "[object Function]"
    Object.prototype.toString.apply(null) === "[object Null]"
    Object.prototype.toString.apply(undefined) === "[object undefined]"
    Object.prototype.toString.apply('HI') === "[object String]"
    

    可以处理null的问题;但是IE8以下会失效

    附: jQuery下jQuery.type()的实现:

    var class2type = {} ;
    "Boolean Number String Function Array Date RegExp Object Error".split(" ").forEach(function(e,i){
        class2type[ "[object " + e + "]" ] = e.toLowerCase();
    }) ;
    //当然为了兼容IE低版本,forEach需要一个polyfill,不作细谈了。
    function _typeof(obj){
        if ( obj == null ){
            return String( obj );
        }
        return typeof obj === "object" || typeof obj === "function" ?
            class2type[ class2type.toString.call(obj) ] || "object" :
            typeof obj;
    }
    
    

    相关文章

      网友评论

          本文标题:js中检测数据类型总结

          本文链接:https://www.haomeiwen.com/subject/kjyhattx.html