亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

jquery中的工具使用方法$.isFunction, $.isArray(), $.isWindow()

2019-11-20 11:53:01
字體:
來源:轉載
供稿:網友

javascript中對變量類型的判斷中,我們講解了了jquery中$.type()實現的原理。當然,jquery除了提供$.type的工具方法外,還提供了幾個其他的工具方法:$.isFunction(), $.isArray(), $.isWindow(), $.isNumeric()等。這幾個方法從方法名上就能看出其用途來,下面我們來一一講解這幾個方法在jQuery(2.1.2)中實現的內部細節。

1. $.isFunction()

$.isFunction()是用來判斷變量是否為function類型,我們通過幾個例子來看看:

$.isFunction(123); // false$.isFunction(true);// false$.isFunction([1, 2]);// false$.isFunction(function(){});// truefunction func(){}var sfunc = function(){}$.isFunction(func); // true$.isFunction(sfunc);// true

從上面的例子中能夠看到,在$.isFunction(param)中,若傳入的param是function類型,則返回true;其他的類型則返回false。
查看jquery的源碼我們可以看到,$.isFunction()也是通過$.type()實現的:

isFunction: function( obj ) {	return jQuery.type(obj) === "function";}

2. $.isArray()

$.isArray()是用來判斷變量是否為array類型。同樣,我們也通過幾個例子來看看$.isArray的用法:

$.isArray(123);  // false$.isArray(true); // false$.isArray([1, 2]);// true$.isArray(new Array(3, 4)); // true

無論是array的字面量還是使用new關鍵詞創建的變量,都能使用$.isArray()判斷其是array類型。在jquery源碼中,$.isArray調用的就是原生Array提供的isArray方法。因為在高版本的瀏覽器中,已經給原生JavaScript提供了一個isArray方法用來判斷變量是否為array類型。
isArray: Array.isArray
3. $.isWindow()

$.isWindow()是用來判斷當前變量是否為window,如:

$.isWindow(window); // true$.isWindow([]); 	// false$.isWindow(null); 	// false

在jQuery源碼中:

isWindow: function( obj ) {	return obj != null && obj === obj.window;}

他是通過判斷obj是否有window屬性,來判斷obj是否為window對象。因為window對象里有一個屬性window,就是他自己,因此:window.window===window,同樣的:

window.window.window.window === window;

可以一直循環下去。

而代碼里為什么要先判斷一下obj是否為null呢?因為在判斷null或undefined是否有window屬性時,代碼會拋出異常:Uncaught TypeError: Cannot read property ‘window' of null。因此,為了防止代碼錯誤,首先判斷變量是否為null,若為null,則它肯定不是window對象,直接返回false;否則再判斷這個變量有沒有window屬性。

4. $.isNumeric()

$.isNumeric()是用來判斷當前變量是否為數字類型,可是為什么我不使用$.type()=="number"來判斷呢。我們先來看幾個官方的例子:

$.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()能夠判斷出“-10”, “0xFF”這樣字符串類型的數字,而$.type()則會將其解析為string類型。
在jquery源碼中,是這樣判斷變量類型的:

isNumeric: function( obj ) {	// parseFloat NaNs numeric-cast false positives (null|true|false|"")	// ...but misinterprets leading-number strings, particularly hex literals ("0x...")	// subtraction forces infinities to NaN	// adding 1 corrects loss of precision from parseFloat (#15100)	return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0;}

首先判斷其變量是否為array類型,若是則直接返回false。可是為什么要先判斷變量是否為array類型呢?因為[123]這樣類型的數組是可以直接進行減法運算的,同時也能通過parseFloat([“123”])轉換為數字:

[100] - 60 		// 40[100] - [60] 		// 40parseFloat([123]) 	// 123parseFloat(["345"]) // 345

因此不能直接通過parseFloat()轉換,然后判斷。首先得判斷這個變量是否為數組;若不是才進行下一步的判斷:

(obj - parseFloat( obj ) + 1) >= 0

純數字,字符串類型的數字,0開頭的數字(8進制),0x開頭的數組(16進制)等,都能通過parseFloat()正常進行轉換為10進制的數字。經過上面表達式的運算,肯定是大于0的??墒菫槭裁匆由?呢?代碼里也解釋了,通過parseFloat()轉換到,會造成精度丟失的問題,因此+1后,運算結果更加的準確。

而其他類型的通過parseFloat()轉換后得到的是NaN,NaN無論通過怎樣的運算,都是不能跟0比較的,返回false。

在jquery之前的版本(如2.0.2)中:

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

我們可以發現,使用這樣的代碼$.isNumeric([123])運行后,得到的true,而實際上,它是個數組類型。不過還好,在后續的版本已經修復了。

5. $.isEmptyObject()

$.isEmptyObject()不是用來判斷變量的類型了,而是判斷一個object類型是否為空,不包含任何屬性。
從 jQuery 1.4 開始,這個方法既檢測對象本身的屬性,也檢測從原型繼承的屬性(因此沒有使用hasOwnProperty)。參數應當是一個普通的JavaScript對象, 對于其他類型的對象(DOM元素,原始strings/numbers,host對象)在跨瀏覽器中可能無法提供一致的結果。

$.isEmptyObject({name:"wenzi"}) // false$.isEmptyObject({}) // truefunction Person(){	this.name = "wenzi"}$.isEmptyObject(new Person()); // falsefunction Student(){}Student.prototype.name = "wenzi";$.isEmptyObject(new Student()); // false

我們能夠看到,不論是對象本身的屬性,還是prototype上的屬性,只要存在,都會返回false。

isEmptyObject: function( obj ) {	var name;	for ( name in obj ) {		return false;	}	return true;}

在jquery中,是通過for~in進行檢測的。因為for~in也是能循環到prototype上的屬性的,若進入到循環中,則說明obj存在屬性,發揮false;否則返回true。
6. 總結

jquery中還提供了很多各種各樣的工具方法,讓我們在編寫js代碼時更加的方便。以后有機會時再總結其他的工具方法。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久久久综合| 欧美激情三级免费| 欧美在线视频一区二区| 亚洲精品国产精品自产a区红杏吧| 亚洲精品一区二区久| 亚洲国产精品999| 欧美激情日韩图片| 亚洲性av网站| 欧美成人黄色小视频| 国产精品视频午夜| 欧美日韩国产影院| 另类少妇人与禽zozz0性伦| 国产福利视频一区| 久久久久久久久网站| 国产精品一久久香蕉国产线看观看| 98精品国产自产在线观看| 日本久久亚洲电影| 97视频在线观看免费高清完整版在线观看| 久久99视频精品| 91精品免费视频| 色黄久久久久久| 欧美黑人狂野猛交老妇| 久久精品视频中文字幕| 91久久国产精品| 精品久久久久久久久久久久久久| 91系列在线观看| 成人福利网站在线观看11| 欧美一级高清免费| 国产精品av在线| 性夜试看影院91社区| 日韩欧美一区二区三区| 色黄久久久久久| 亚洲精品美女视频| 欧美一级大片在线观看| 亚洲日韩第一页| 另类天堂视频在线观看| 久久久精品久久久| 久精品免费视频| 少妇高潮 亚洲精品| 茄子视频成人在线| 欧美精品国产精品日韩精品| 久久av资源网站| 久久久久久久999| 欧美极品xxxx| 成人福利视频在线观看| 欧美国产日韩一区二区三区| 性欧美办公室18xxxxhd| 久久视频在线观看免费| 欧美日韩一区二区在线播放| 国产精品看片资源| 亚洲少妇激情视频| 成人福利网站在线观看| 国产欧美va欧美va香蕉在| 日韩免费在线电影| 国产精品久久999| 亚洲一区国产精品| 国产精品都在这里| 中文字幕日韩高清| 久久中文字幕国产| 少妇高潮久久久久久潘金莲| 亚洲午夜性刺激影院| 成人欧美一区二区三区黑人| 蜜月aⅴ免费一区二区三区| 亚洲欧美综合精品久久成人| 亚洲一区免费网站| 欧美激情区在线播放| 国产精品亚洲美女av网站| 92福利视频午夜1000合集在线观看| 国产高清在线不卡| 国产色婷婷国产综合在线理论片a| 91精品免费久久久久久久久| 最近2019中文字幕一页二页| 超碰日本道色综合久久综合| 91九色视频导航| 亚洲精品午夜精品| 在线观看欧美成人| 欧美大全免费观看电视剧大泉洋| 国产亚洲精品美女| 国产精品扒开腿做| 精品国偷自产在线视频99| 成人羞羞国产免费| 国产日产亚洲精品| 久久久久久久久久av| 欧美国产日韩在线| 午夜精品一区二区三区在线播放| 欧美猛男性生活免费| 伊人成人开心激情综合网| 国产精品一区av| 国产精品三级网站| 亚洲日韩中文字幕| 亚洲偷熟乱区亚洲香蕉av| 久久视频精品在线| 亚洲综合日韩在线| 国产成人精品亚洲精品| 国产精品中文在线| 国产精品国产福利国产秒拍| 在线观看欧美日韩| 91嫩草在线视频| 精品性高朝久久久久久久| 欧美成人黑人xx视频免费观看| 欧美性xxxxxx| 亚洲一区免费网站| 91精品国产91久久久久久最新| 亚洲色图综合久久| 久久国产精品免费视频| 欧美福利视频网站| 亚洲人成电影网站| 亚洲经典中文字幕| 尤物九九久久国产精品的特点| 清纯唯美亚洲综合| 亚洲欧美国产精品专区久久| 亚洲欧美激情在线视频| 亚洲韩国日本中文字幕| 亚洲人成电影网站色www| 午夜精品福利在线观看| 蜜月aⅴ免费一区二区三区| 国产精品嫩草影院一区二区| 亚洲福利视频在线| 欧美xxxx做受欧美.88| 日韩久久免费电影| 7777精品久久久久久| 亚洲国产成人精品电影| 亚洲精品免费一区二区三区| 不卡在线观看电视剧完整版| 亚洲三级av在线| 亚洲精品自在久久| 日韩视频永久免费观看| 精品久久中文字幕| 国产精品久久色| 日韩欧美亚洲国产一区| 久久视频免费在线播放| 成人网在线免费看| 日韩国产精品视频| 亚洲美女av在线| 国内免费精品永久在线视频| 亚洲男女自偷自拍图片另类| 欧美性猛交xxxxx水多| 57pao成人永久免费视频| 人人做人人澡人人爽欧美| 91美女福利视频高清| 午夜精品久久久久久久久久久久久| 欧美一区三区三区高中清蜜桃| 91精品视频在线免费观看| 欧美最猛性xxxxx免费| 国产精品美女免费| 一区二区亚洲精品国产| 91精品国产综合久久男男| 亚洲欧美日韩一区在线| 国产一区二区三区网站| 久热精品视频在线| 国产精品网红福利| 亚洲自拍偷拍福利| 国产日韩精品视频| 一本一本久久a久久精品综合小说| 热久久免费视频精品| 一区二区三区四区视频| 中文国产亚洲喷潮| 中文在线资源观看视频网站免费不卡| 色综合色综合网色综合| 日韩激情视频在线播放| 亚洲欧美在线看| 不卡av日日日| 精品欧美激情精品一区| 97福利一区二区|