您的位置:首页 > Web前端 > JavaScript

实现一个JavaScript获取变量类型的方法

2019-12-18 13:54 951 查看

在JavaScript中要直接获取一个变量的类型,可能不会这么简单,比较熟悉的可能有typeof,instanceof,Object.prototype.toString.call,这几个方法各自有一些问题:


    一个历史原因造成的bug,typeof null === 'object'

    typeof对于其他非基本类型,都是直接返回object,typeof [1,2] === 'object'

    typeof (new Date()) === "object"


    instanceof 用来判断变量是否指定类的实例,比如 [1,2] instanceof Array === true,注意点是非基础类型都继承自object,也就是说非基本类型 instanceof Object === true

    Object.prototype.toString.call也能拿到变量类型的字符串,通过正则提取对应的名字

    Object.prototype.toString.call('sss') // [object String]

    但是有个问题是,对于自定义的对象,Class返回的都是 [object Object]

    好在通过自定义对象的构造函数名字,能拿到对象类型,所以,综合版的获取对象类型方法如下


    function getTypeName( variable ) {
        if ( variable === null ) {
            return 'null';
        }
        var t = typeof variable;
        switch( t ) {
            case 'object':
            case 'function':
                if ( variable.constructor ) {
                    if ( variable.constructor.name ) {
                        return variable.constructor.name;
                    } else {
                        //匿名函数
                        var funcStr = variable.constructor.toString();
                        // function name () {}
                        var preg = /\s*function\s+([^\s\(]*)/;
                        var match = funcStr.match( preg );
                        if ( match[ 1 ] ) {
                            return match[ 1 ];
                        }
                    }
                } else {
                    var name = Object.prototype.toString.call( variable );
                    return name.match( /^\[object (.*+)\]$/ )[ 1 ];
                }
            default:
                return t;
        }
    }


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JavaScript