您的位置:1010cc时时彩经典版 > 服务器&运维 > Js类型检测的方法,Ext相关_脚本之家

Js类型检测的方法,Ext相关_脚本之家

发布时间:2019-11-25 01:42编辑:服务器&运维浏览(163)

    YAHOO.lang=YAHOO.lang||{ isArray:function{ varl=YAHOO.lang; //借使该指标有length这些性子,同不时候协助splice方法, //那么就觉着它为数组。 returnl.isNumber&&l.isFunction; } returnfalse; }, isBoolean:function{ returntypeofo==='boolean'; }, isFunction:function{ returntypeofo==='function'; }, isNull:function{ returno===null; }, isNumber:function{ returntypeofo==='number'&&isFinite; }, isObject:function{ return(o&&(typeofo==='object'|| YAHOO.lang.isFunction||false; }, isString:function{ returntypeofo==='string'; }, isUndefined:function{ returntypeofo==='undefined'; }, //... isValue:function{ //Infinityfails //return(o||o===false||o===0||o===''); varl=YAHOO.lang; return||l.isString||l.isBoolean; } };……复制粘贴分界线…… 传闻,在YUI2.2.0本子以前,YAHOO.lang.isArray是那般写的。 isArray:function{ //safari有bug,只能管理字符串 if(obj&&obj.constructor&& obj.constructor.toString>-1){ returntrue; }else{ returnYAHOO.lang.isObject&&obj.constructor==Array; } },而这么的判别数组类型是有重疾的,比如上边包车型客车代码 functionmyArray(){ this.name='name'; } varo2=newmyArray(); alert(YAHOO.util.isArray;//弹出true //因为obj.constructor.toString()中包涵myArray字样,所以回来true functionObj(){ this.name='name'; } varo=newObj(); o.constructor=Array; alert);//弹出true //因为在JavaScript里,constructor也是属性 //能够动态内定,所以回来true因而,在YUI的接续版本,YAHOO.lang.isArray被更改成了脚下的这些样子 isArray:function{ varl=YAHOO.lang; //假如该指标有length这几个性情,同期扶助splice方法, //那么就感到它为数组。 returnl.isNumber&&l.isFunction; } returnfalse; },新的落实用了其它的笔触:假使该对象有length这些天性,同时协助splice方法,那么就感觉它为数组。当然,它还是有漏洞,大家照样能够创立二个目的,使其具有length属性和splice方法。但作者以为今后的兑现更为客观,因为一来大概性超小,二来防止了奇异的浏览器的BUG。 再看YUI2.3.0后引进的YAHOO.lang.isValue,其实就是决断参数是还是不是是三个有意义的值,只要参数不是null/undefined/NaN,那么都回到true。(注意这和日常的推断真假的分化便是,0/false/'',所以YAHOO.lang.isValue非常切合用来判断表单域的值是不是为有效值。

    Js类型检查测量试验的办法,是营造Js知识系统的一小块

    风姿罗曼蒂克、Js中有5种基本数据类型

     

    Undefined 、Null、Boolean、String、Number(包含NaN)

     

    NaN和其他类型的值都不对等,富含NaN;isNaN用来判断数值是还是不是NaN类型  

    二、类型推断

     

    1. isFinite(number)

    是不是无穷大,若是或不是回到true,假如是NaN,也许正负无穷大,或然非数字类型再次来到false 

     

     

    1. typeof运算符

    选择的时候,空格大概typeof(param)

     

    重返的值

    string

    number

    boolean

    undefined

    function

    object null也返回object

     

    听说上述,判别项目能够如下:

     

    var obtainType = function(o){

         var t;

         if(o === null ) return “null”;

         else if(o !== o) return “NaN”;

         else if( (t = typeof o) !== ‘object’) return t;

    }

    能够识别出null、NaN string number boolean undefined function。

     

    上边最终只剩下object,譬如数组的甄别,自定义类型的鉴定区别

     

    1. 数组等原生类型的辨识,能够运用如下

     

    function obtainType(type) {

        return function (obj) {

            return Object.prototype.toString.call(obj) === "[object " type "]"

        }

    }

     

    var isObject = isType("Object")

    var isString = isType("String")

    var isArray = Array.isArray || isType("Array")

    var isFunction = isType("Function")

     

     

    1. 自定义类型判定

     

    /**

     * 重返函数的名字,大概为空白;不是函数,重临null

     */

    Function.prototype.getName = function () {

        if ("name" in this) return this.name;

        return this.name = this.toString().match(/functions*([^(]*)(/)[1];

    };

     

     

    原生类型和自定义类型的object都得以剖断了,于是

     

    /**

     * 返回:null NaN undefined string number boolean

     * function Array String Object(包罗部分自定义类型卡塔 尔(英语:State of Qatar) 自定义类型

     */

    var obtainType =function(o){

        /**

         * 获取参数类型

         * 对象直接量、Object.create、自定义构造函数的类属性皆为Object;

         * 识别出原生类型 (内置构造函数和宿主对象卡塔尔国

         */

        function classOf(obj){

            return Object.prototype.toString.call(obj).slice(8, -1);

        }

     

        /**

         * 重回函数的名字,大概为空白;不是函数,重回null

         */

        Function.prototype.getName = function () {

            if ("name" in this) return this.name;

            return this.name = this.toString().match(/functions*([^(]*)(/)[1];

        };

        var t, c, n;

        // 管理null值特殊情状

        if (o === null) return "null";

        // NaN:和本身值不等于

        if (o !== o) return "NaN";

        // 识别出原生值类型和函数、undefined

        if ((t = typeof o) !== "object") return t;

        // 识别出原生类型

        if ((c = classOf(o)) !== "Object") return c;

        // 重返自定义类型构造函数名字

        if (o.constructor && typeof o.constructor === "function" &&

            (n = o.constructor.getName()))

            return n;

        return "Object";

    };

     

     

    5.

     

    var strObj = new String('abc');

     

    typeof strObj // "object"

     

    obtainType(strObj) // "String"

     

     

    三、 其它

     

    1. Dom成分判别

    if(dom.nodeType){...Dom...}

    if(dom.createElement)

     

    1. jQuery等门类判别

    $('#aa') instanceof jQuery//不帮助跨多窗口和框架子页面

     

    1. if(a) a为null undefined 0 "" NaN时自动转变到false

    相通推荐的写法

     

    // bad

    if (name !== '') {

        // ...stuff...

    }

     

    // good

    if (name) {

        // ...stuff...

    }

     

    // bad

    if (collection.length > 0) {

        // ...stuff...

    }

     

    // good

    if (collection.length) {

        // ...stuff...

    }

    豆蔻梢头、Js中有5种基本数据类型 Undefined 、Null、Boolean、String、Number(富含NaN) NaN和任何项目标值都...

    复制代码 代码如下: isNull: function{ return a === null; }, isUndefined: function{ return a === undefined; }, isNumber: function{ return typeof a === 'number'; }, isString: function{ return typeof a === 'string'; }, isBoolean: function{ return typeof a === 'boolean'; }, isPrimitive: function{ var a = typeof b; return !!(b === undefined || b === null || a == 'boolean' || a == 'number' || a == 'string'); }, isArray: function{ return proto_obj.toString.call === '[object Array]'; }, isFunction: function{ return proto_obj.toString.call === '[object Function]'; }, isPlainObject: function{ if (!o || o === win || o === doc || o === doc.body) { return false; } return 'isPrototypeOf' in o && proto_obj.toString.call === '[object Object]'; }, isWindow: function{ return o && typeof o === 'object' && 'setInterval' in o; }, isEmptyObject: function { return false; } return true; } 以上isXX连串中,isUndefined在类库中用的最多。如判别是或不是传入了有个别参数,推断指标是不是持有有个别属性等等。但那个函数是无须存在,笔者已将其移除。理由如下 1,isUndefined 与 使用全等或typeof 多了生机勃勃层函数调用。很猛烈多生龙活虎层函数调用比一贯利用原生的演算符作用会低,但只要isUndefined调用次数过多如上万次仍旧很鲜明的。小编已经在邮箱框架中进入了该函数,调用次数有4000数14回,从质量解析工具看占用了近1%的时光。仅仅一个判定占1%的调用时间照旧很骇然的。当然,邮箱框架内的isUndefined处在多层闭包的顶层,访谈其也会据有相当多时间。假如这一条还不足以令你吐弃isUndefined,请看上边。 2,函数从一定程度上是对生龙活虎部分代码的包裹,抽象。是团组织特出代码的法子之生龙活虎,且便于减弱代码的纷纭。但isNull/isUndefined/isBoolean/isNumber/isString函数内唯有一句,抽象档次非常的低。由此完全不用封装而提抽出几个函数。 3,isUndefined 与 a === undefined相比较并不会省掉几个字节。 综上,作者去掉了类库中对大旨类型判定的isNull/isUndefined/isBoolean/isNumber/isString,必要用到那几个判定的时候一向利用typeof运算符等。

    本文由1010cc时时彩经典版发布于服务器&运维,转载请注明出处:Js类型检测的方法,Ext相关_脚本之家

    关键词: