zoukankan      html  css  js  c++  java
  • 对jQuery.isArray方法的分析

    jQuery.isArray方法应于判断是不是数组,是的话返回true,否则返回false。调用如:jQuery.isArray([]),返回true。其实现源码如下:

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

    我们看到它的主要逻辑是先看浏览器支不支持Array.isArray方法,如果不支持则调应jQuery自己的jQuery.type方法,看其返回值是不是"array"。

    firefox、chrome、IE9及以上的浏览器都支持Array.isArray方法。其它浏览器就需要jQuery.type的帮忙了,jQuery.type的源码如下:

    type: function( obj ) {
        if ( obj == null ) {
            return obj + "";
        }
        return typeof obj === "object" || typeof obj === "function" ?
            class2type[ toString.call(obj) ] || "object" :
            typeof obj;
    }

    代码中的if好理解,如果传入的null则返回“null”字符串。

    return 后面的代码结构上看起来比较乱。我们整理如下:

    return ( typeof obj === "object" || typeof obj === "function" )  ? ( class2type[ toString.call(obj) ] || "object" ) : typeof obj;

    现在清楚多了,它是判断( typeof obj === "object" || typeof obj === "function" )的值是不是真,如果是真则返回 ( class2type[ toString.call(obj) ] || "object" ),反之则返回 typeof obj。

    所以当传入的是字符串,数字,undefined的时直接返回 typeof obj。当传入的是对象、数组、函数时则直接返回 ( class2type[ toString.call(obj) ] || "object" )。现在主要看看class2type[ toString.call(obj) ]的实现:

    var class2type = {};
    var toString = class2type.toString;
    jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
        class2type[ "[object " + name + "]" ] = name.toLowerCase();
    });

    jQuery定义了class2type的一个对象,并将其初始化为如下的格式:

    {
        "[object Array]" : "array",
        "[object Boolean]" : "boolean",
        "[object Date]" : "date",
        "[object Error]" : "error",
        "[object Function]" : "function",
        "[object Number]" : "number",
        "[object Object]" : "object",
        "[object RegExp]" : "regexp",
        "[object String]" : "string"
    }

    toString方法的返回值正好是class2type对象的key值。所以class2type[ toString.call(obj) ]正好得到我们需要的返回类型字符串。

  • 相关阅读:
    linux -- 基于zookeeper搭建yarn的HA高可用集群
    Linux -- 之HDFS实现自动切换HA(全新HDFS)
    Hadoop格式化 From hu-hadoop1/192.168.11.11 to hu-hadoop2:8485 failed on connection exception: java.net.
    Directory /home/hdfs/name is in an inconsistent state: storage directory does not exist or is not a
    react学习01
    单页面应用(spa)引入百度地图(Cannot read property 'dc' of undefined)
    npm 发布包
    Vue学习-01
    echarts3.0使用总结
    webpack学习--创建一个webpack打包流程
  • 原文地址:https://www.cnblogs.com/qiaotaojin/p/4059674.html
Copyright © 2011-2022 走看看