你的位置:首页 > Java教程

[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 windowisWindow: function( obj ) {  return obj && typeof obj === "object" && "setInterval" in obj; },

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

 


 




西藏旅游线路大全什么时候去西藏旅游最好西藏跟团旅游报价多少西藏旅游必去的地方是西藏旅游必去景点排名天津周边旅游_天津周边旅游景点大全_天津周边旅游景点推荐 马来西亚沙巴水上清真寺景点介绍_门票_交通 梦笔山_马尔康景点介绍_阿坝州景点介绍 卧龙自然保护区旅游景点介绍 行走海南 东方最纯净的美丽 南澳七娘山门票包括什么项目?七娘山野炊山庄2015最新价格? 星期八小镇大人不玩进去要门票吗?广州星期八小镇儿童票多少钱? 醉美坝达梯田 曼妙的曲线是大山的“指纹” 深圳迪可可小镇好玩吗? 怎样去北海涠洲岛? 方文山喊你来西塘汉服文化周 定制礼品大派送(组图) 北海的最佳旅游时间是什么时候? 吉隆坡购物应该去哪里呢? 皮皮岛在哪里?有什么好玩的? 什么牌子的奶粉好?怎样区别进口奶粉和国内奶粉? 曼谷天铁怎么收费?怎么坐天铁? AQ147A180FAJME Datasheet AQ147A180FAJME Datasheet SQCB7M5R6BAJME\500 Datasheet SQCB7M5R6BAJME\500 Datasheet 12061C512JAT2A Datasheet 12061C512JAT2A Datasheet 佳木斯跟团香港四天三晚游 佳木斯跟团香港四天三晚游 佳木斯跟团香港四天三晚游 齐齐哈尔跟团港澳四天三晚 齐齐哈尔跟团港澳四天三晚 齐齐哈尔跟团港澳四天三晚 大庆跟团香港三天两晚游 大庆跟团香港三天两晚游 大庆跟团香港三天两晚游