zoukankan      html  css  js  c++  java
  • jQuery静态方法isFunction,isArray,isWindow,isNumeric使用和源码分析

    上一篇随笔中总结了js数据类型检测的几个方法和jQuery的工具方法type方法,本篇要分析几个方法都依赖type方法,所以不了解type方法的请先参看http://www.cnblogs.com/yy-hh/p/4667950.html 

    isFunction方法

     

    用于测试是否为函数的对象

    示例:

    function stub() {}
    var objs = [
          function () {},
          { x:15, y:20 },
          null,
          stub,
          "function"
      ];
      jQuery.each(objs, function (i) {
      var isFunc = jQuery.isFunction(objs[i]);
      $("span:eq( " + i + ")").text(isFunc);
    })

    运行结果:

    [ true,false,false,true,false ]

    源码分析:

    // See test/unit/core.js for details concerning isFunction.
    // Since version 1.3, DOM methods and functions like alert
    // aren't supported. They return false on IE (#2968).
    isFunction: function( obj ) {
         return jQuery.type(obj) === "function";
    },

    首先就告诉你自从1.3版本就有bug ,一些dom方法和函数例如alert在ie里面会返回false,看了下这个bug,因为toString方法和valueOf方法都会被重写所以有人就提出了用instanceof方法检测但是在ie6还是有问题。目前为止这个bug还没有关闭具体大家可以从参考官网bug页因为我分析的是1.7.1所以就先按照这个版本来,这个方法就是简单的调用type方法判断其返回结果是否为字符串function

     

    isArray方法

     

    用于测试是否为数组的对象

    示例:

    $("b").append( " + $.isArray([]) );//<b>true</b>

    源码分析:

    isArray: Array.isArray || function( obj ) {
            return jQuery.type(obj) === "array";
     },

    跟isFunctoin一样直接使用type方法的返回结果

     

    isNumeric方法

     

    确定它的参数是否是一个数字。

    $.isNumeric() 方法检查它的参数是否代表一个数值。如果是这样,它返回 true。否则,它返回false。该参数可以是任何类型的

    示例:

    $.isNumeric("-10");  // true
    $.isNumeric(16);     // true
    $.isNumeric(0xFF);   // true
    $.isNumeric("0xFF"); // true
    $.isNumeric("8e5");  // true (exponential notation string)
    $.isNumeric(3.1415); // true
    $.isNumeric(+10);    // true
    $.isNumeric(0144);   // true (octal integer literal)
    $.isNumeric("");     // false
    $.isNumeric({});     // false (empty object)
    $.isNumeric(NaN);    // false
    $.isNumeric(null);   // false
    $.isNumeric(true);   // false
    $.isNumeric(Infinity); // false
    $.isNumeric(undefined); // false

    源码分析:

    isNumeric: function( obj ) {
            return !isNaN( parseFloat(obj) ) && isFinite( obj );
    },

    这个方法不是判断Number类型而是看起来像数字的类型只要传进去的参数包含数字那么就会返回true,首先使用parseFloat方法把参数转为数组,此方法会保留参数中的数字部分过滤掉其他部分,如果结果不是NaN也没有超过最大值就是true否则返回false

     

    isWindow方法

     

    用于测试是否为window对象

    源码分析:

    // A crude way of determining if an object is a window
    isWindow: function( obj ) {
        return obj && typeof obj === "object" && "setInterval" in obj;
     },

    一种粗略的方法判断对象是window,如果满足传进来的是对象而且具有setInterval方法则认为该对象为window对象,现在这个方法已经改为判断是否是窗口对象了具体以后在分析

     

     

  • 相关阅读:
    8.ffmpeg-基础常用知识
    7.SwrContext音频重采样使用
    6.AVCodecContext和AVCodec
    5.AVStream和AVCodecParameters
    Discuz论坛禁止匿名发贴,却出现匿名发帖或回复?找不到发帖用户,DZ如何禁止匿名发帖修改教程
    在独立服务器上通过Ubuntu 18.04+apache2+php5.6+mysql5.7+discuz!x3.4搭建的论坛实现伪静态的正确方法
    [源码] 2200套微信小程序源码
    discuz论坛更换目录后出现头像无法显示/ucenter无法进入
    discuz 您的服务器不支持 CURL,这将会导致应用无法安装。请联系您的服务商或者网站技术人员
    Discuz在服务器配置安装时出现xml_parser_create()不支持
  • 原文地址:https://www.cnblogs.com/yy-hh/p/4669507.html
Copyright © 2011-2022 走看看