代码分析jQuery四种静态方法使用


Posted in Javascript onJuly 23, 2015

jQery每一个方法都有对应代码解析,非常详细,具有介绍请看下文:

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对象

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

一种粗略的方法判断对象是window,如果满足传进来的是对象而且具有setInterval方法则认为该对象为window对象,现在这个方法已经改为判断是否是窗口对象了具体以后在分析。希望大家能够喜欢以上内容所述。

Javascript 相关文章推荐
JavaScript 页面坐标相关知识整理
Jan 09 Javascript
jquery validation插件表单验证的一个例子
Mar 03 Javascript
基于jquery的跨域调用文件
Nov 19 Javascript
js实现跟随鼠标移动且带关闭功能的图片广告实例
Feb 26 Javascript
js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解
Nov 09 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
Jan 04 Javascript
深入学习jQuery Validate表单验证
Jan 18 Javascript
用原生js做单页应用
Jan 17 Javascript
谈谈JavaScript数组常用方法总结
Jan 24 Javascript
微信小程序表单弹窗实例
Jul 19 Javascript
原生javascript单例模式的应用实例分析
Feb 23 Javascript
深入理解javascript中的this
Feb 08 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
Jul 22 #Javascript
HTML5实现留言和回复页面样式
Jul 22 #Javascript
javascript控制层显示或隐藏的方法
Jul 22 #Javascript
javascript实现简单查找与替换的方法
Jul 22 #Javascript
javascript数组随机排序实例分析
Jul 22 #Javascript
JavaScript对数组进行随机重排的方法
Jul 22 #Javascript
JavaScript检测上传文件大小的方法
Jul 22 #Javascript
You might like
php 随机记录mysql rand()造成CPU 100%的解决办法
2010/05/18 PHP
PHP中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
PHP读取xml方法介绍
2013/01/12 PHP
Linux中为php配置伪静态
2014/12/17 PHP
PHP中Closure类的使用方法及详解
2015/10/09 PHP
PHP运用foreach神奇的转换数组(实例讲解)
2018/02/01 PHP
PHP实现动态添加XML中数据的方法
2018/03/30 PHP
PHP实现文字写入图片功能
2019/02/18 PHP
extjs 学习笔记(二) Ext.Element类
2009/10/13 Javascript
javascript 清空form表单中某种元素的值
2009/12/26 Javascript
jQuery实现异步获取json数据的2种方式
2014/08/29 Javascript
基于NodeJS的前后端分离的思考与实践(三)轻量级的接口配置建模框架
2014/09/26 NodeJs
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
2016/03/14 Javascript
jQuery Ajax 全局调用封装实例代码详解
2016/06/02 Javascript
浅谈js中对象的使用
2016/08/11 Javascript
vue.js数据绑定操作详解
2018/04/23 Javascript
JS实现图片转换成base64的各种应用场景实例分析
2018/06/22 Javascript
Webstorm2016使用技巧(SVN插件使用)
2018/10/29 Javascript
JavaScript简易计算器制作
2020/01/17 Javascript
vue实现淘宝购物车功能
2020/04/20 Javascript
python将MongoDB里的ObjectId转换为时间戳的方法
2015/03/13 Python
python装饰器与递归算法详解
2016/02/18 Python
IntelliJ IDEA安装运行python插件方法
2018/12/10 Python
python手机号前7位归属地爬虫代码实例
2020/03/31 Python
HTML5 MiranaVideo播放器 (代码开源)
2010/06/11 HTML / CSS
兰蔻加拿大官方网站:Lancome加拿大
2016/08/05 全球购物
在C中是否有模拟继承等面向对象程序设计特性的好方法
2012/05/22 面试题
索桥的故事教学反思
2014/02/06 职场文书
创业者是否需要商业计划书?
2014/02/07 职场文书
乡镇三项教育实施方案
2014/03/30 职场文书
彩妆大赛策划方案
2014/05/13 职场文书
煤矿安全生产标语
2014/06/06 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
客户付款通知书
2015/04/23 职场文书
PHP解决高并发问题
2021/04/01 PHP
一行Python命令实现批量加水印
2022/04/07 Python