zoukankan      html  css  js  c++  java
  • 检测类型

    JavaScript 是弱类型语言,对类型没有严格限制,但是在程序中经常需要对类型进行检测和转换,下面结合示例介绍类型检测和转换的技巧。

    使用 typeof 检测类型

    typeof 运算符专门用来测试值的类型,特别对于原始值有效,而对于对象类型的数据,如数组、对象等,返回的值都是字符串”object”。

    alert( typeof 1);           //返回字符串"number" 
    alert( typeof "a");         //返回字符串"string"
    alert( typeof true);        //返回字符串"boolean" 
    alert( typeof {});          //返回字符串"object" 
    alert( typeof [] );         //返回字符串"object"
    alert( typeof function(){});//返回字符串"function" 
    alert( typeof undefined);   //返回字符串"undefined" 
    alert( typeof null);        //返回字符串"object" 
    alert( typeof NaN);         //返回字符串"number"
    //由于 null 值返回类型为 object,用户可以定义一个检测简单数据类型的一般方法。 function type(o) { return (o === null ) ? "null" : (typeof o); //如果是 null 值,则返回字符串"null",否则返回(typeof o)表达式的值 }

    使用 constructor 检测类型

    对于对象、数组等复杂数据,可以使用 Object 对象的 constructor 属性进行检测。 constructor 表示构造器,该属性值引用的是构造当前对象的函数。

    var o = {}; 
    var a = []; 
    alert( o.constructor == Object); //返回 true 
    alert( a.constructor == Array);  //返回 true

    使用 constructor 属性可以检测绝大部分数据的类型,但对于 undefined 和 null 特殊值, 就不能够使用 constructor 属性,否则会抛出异常。这时可以先把值转换为布尔值,如果为 true,则说明是存在值的, 然后再调用 constructor 属性。

     封装类型检测方法: toString()

    使用 toString() 方法可以设计一种更安全的检测 JavaScript 数据类型的方法,用户还可以根据开发需 要进一步补充检测类型的范围。 由 Object 对象定义的 toString() 方法返回的字符串形式是[object class],其中object是大类表示对象的通用类型,class是小类表示对象的内部类型(Array,Function,Date,Math,Error......),用户自定义对象为object,class 值提供的信息与对象的 constructor 属性值相似,但是 class 值是以字符串的形式提供这些信息的,这在特定的环境中是非常有用的。如果使用 typeof运算符来检测,则所有对象的 class 值都为“Object” 或“Function”。所以不能够提供有效信息。 但是,要获取对象的 class 值的唯一方法是必须调用 Object 的原型方法 toString(),因为很多类型对象都会重置 Object 的 toString() 方法,所以不能直接调用对象的 toString() 方法。

    var d = new Date(); 
    alert(d.toString());   //返回当前 UTC 时间字符串 
    
    var m = Object.prototype.toString; 
    alert(m.apply(d));     //返回字符串"[object Date]"
    //安全检测 JavaScript 基本数据类型和内置对象 
    //参数: o表示检测的值 
    //返回值:返回字符串"undefined"、 "number"、"boolean"、"string"、 "function"、 "regexp"、"array"、"date"、"error"、"object"或"null"
    
    function typeOf (o) { 
        var _toString = Object.prototype.toString; 
        //获取对象的 toString ()方法引用 
        //列举基本数据类型和内置对象类型,你还可以进一步补充该数组的检测数据类型范围 
        var _type = { 
            "undefined":"undefined", 
            "number":"number", 
            "boolean":"boolean",
            "string":"string",
            "[object Function]":"function",
            "[object RegExp]":"regexp", 
            "[object Array]":"array",
            "[object Date]":"date",
            "[object Error)":"error" 
        }
        return _type[typeof o] || _type[_toString.call(o)) || (o ? "object" : "null");   //通过把值转换为字符串,然后匹配返回字符串中是否包含特定字符进行检测
    }
     
  • 相关阅读:
    nginx相关总结
    nginx 虚拟主机+反向代理+负载均衡
    linux文本查看与搜索
    mysqldump导出数据出现问题
    转载 | 缩小浏览器窗口右边出现空白
    转载 | Sublime Text3 安装以及初次配置
    转载 | Sublime text3 实用快捷键整理
    转载 | SVG向下兼容优雅降级方法
    CSS等分布局方法
    如何用实现文字环绕图片?
  • 原文地址:https://www.cnblogs.com/lanshu123/p/10427324.html
Copyright © 2011-2022 走看看