美文网首页Web前端之路
javascript万能的类型检测

javascript万能的类型检测

作者: MakingChoice | 来源:发表于2016-05-30 16:15 被阅读102次

javascript中类型检查有很多方法,比如typeof、instanceof、constructor、Object.prototype.toString()四种方法,前三种方法都存在不能检测的类型,只有第四种属于万能的。<p>

typeof

typeof的缺陷在于不能检测Array、json、null、Date()、Error类型。

instanceof

instanceof相当于实例对象的检测,instanceof 方法要求开发者明确地确认对象为某特定类型。

例如:

var person=new Person();
console.log(person instanceof Person)
num instanceof Number;
str instanceof String;
bool instanceof Bollean;
.....

不能完全检测的是,instanceof会把null和undefined检测为object类型。

constructor

constructor是对象上的属性,指向构造函数。实例对象寻找属性的顺序,实例对象上没有实例属性或方法时,就先去原型链上找,因此实例属性也可使用constructor属性。这种方式存在的缺陷是,除了undefined和null,其他类型的变量均能使用constructor判断出类型。

Object.prototype.toString()

Object.prototype.toString.call(变量)输出的是一个字符串,字符串里有一个数组,第一个参数是Object,第二个参数就是这个变量的类型,直接匹配这个类型就行。下面是一个封装好的库,可以直接用呀。<p>

J.$package(function(J){

    var ots=Object.prototype.toString;

    var type={
        /**
         * 判断是否数组
         * 
         * @name isArray
         * @function
         * @memberOf J.type
         * @param {Object} o 判断对象
         * @return {boolean} 是否数组
         */   
        isArray : function(o){
            return o && (o.constructor === Array || ots.call(o) === "[object Array]");
        },
        /**
         * 判断是否Object
         * 
         * @name isObject 
         * @function
         * @memberOf J.type
         * @param {Object} o 判断对象
         * @return {boolean} 是否Object
         */   
        isObject : function(o) {
            return o && (o.constructor === Object || ots.call(o) === "[object Object]");
        },
        /**
         * 判断是否布尔类型
         * 
         * @name isBoolean 
         * @function
         * @memberOf J.type
         * @param {Object} o 判断对象
         * @return {boolean} 是否布尔类型
         */  
        isBoolean : function(o) {
            return (o === false || o) && (o.constructor === Boolean);
        },
        /**
         * 判断是否数值类型
         * 
         * @name isNumber
         * @function
         * @memberOf J.type
         * @param {Object} o 判断对象
         * @return {boolean} 是否数值类型
         */  
        isNumber : function(o) {
            return (o === 0 || o) && o.constructor === Number;
        },
        /**
         * 判断是否undefined
         * 
         * @name isUndefined
         * @function
         * @memberOf J.type
         * @param {Object} o 判断对象
         * @return {boolean} 是否undefined
         */ 
        isUndefined : function(o) {
               return typeof(o) === "undefined";
        },
        /**
         * 判断是否Null
         * 
         * @name isNull
         * @function
         * @memberOf J.type
         * @param {Object} o 判断对象
         * @return {boolean} 是否Null
         */ 
        isNull : function(o) {
               return o === null;
        },
       /**
         * 判断是否function
         * 
         * @name isFunction
         * @function
         * @memberOf J.type
         * @param {Object} o 判断对象
         * @return {boolean} 是否function
         */ 
        isFunction : function(o) {
               return o && (o.constructor === Function);
        },
       /**
         * 判断是否字符串
         * 
         * @name isString
         * @function
         * @memberOf J.type
         * @param {Object} o 判断对象
         * @return {boolean} 是否字符串
         */ 
        isString : function(o) {
            return (o === "" || o) && (o.constructor === String);
        }
    }
    J.type=type;
});

相关文章

  • javascript万能的类型检测

    javascript中类型检查有很多方法,比如typeof、instanceof、constructor、Obje...

  • JavaScript 类型检测

    JavaScript 类型检测 本文介绍JavaScript的几种类型检测的方法,以及其各自的适用范围。 Java...

  • Javascript 数据类型检测及原理

    前言 数据类型检测是 JavaScript 中既基础又考验原理的知识,如果你对 JavaScript 数据类型检测...

  • 数据类型检测方法总结typeof OR call(修改this指

    使用typeof方法检测数据类型 方法不严谨,在检测数组和对象是都是object 类型的 万能的数据类型检测方式 ...

  • JavaScript类型检测

    typeof 适合基本类型和函数类型,遇到null失效 instanceof 判断左边的原型链上是否有右边构造函数...

  • JavaScript类型检测

    本篇介绍一下如何检测JavaScript各种类型。 5种原始类型 对象 Function Array 属性 5种原...

  • JavaScript类型检测

    参考视频:JavaScript类型检测-慕课网 可以用以下5种来进行类型检测 typeof 适用场景: 检测基础类...

  • JavaScript类型检测

    既然是一个弱类型的语言,那么如何检测类型呢? 1.typeof typeof会返回一个基础数据类型或对象的字符串表...

  • Javascript类型检测

    typeof适合基本类型及function检测,遇到null失效。 [[class]]通过{}.toString拿...

  • javascript检测变量的类型

    javascript检测变量的类型:目前JavaScript有三种方式:typeof,instanceof,obj...

网友评论

    本文标题:javascript万能的类型检测

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