上一篇隨筆中總結了js數據類型檢測的幾個方法和jQuery的工具方法type方法,本篇要分析幾個方法都依賴type方法,因此不瞭解type方法的請先參看http://www.cnblogs.com/yy-hh/p/4667950.html html
用於測試是否爲函數的對象jquery
示例:數組
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); })
運行結果:app
[ true,false,false,true,false ]
源碼分析:dom
// 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函數
用於測試是否爲數組的對象工具
示例:源碼分析
$("b").append( " + $.isArray([]) );//<b>true</b>
源碼分析:測試
isArray: Array.isArray || function( obj ) { return jQuery.type(obj) === "array"; },
跟isFunctoin同樣直接使用type方法的返回結果spa
肯定它的參數是不是一個數字。
$.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
用於測試是否爲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對象,如今這個方法已經改成判斷是不是窗口對象了具體之後在分析