日韩欧美国产精品免费一二-日韩欧美国产精品亚洲二区-日韩欧美国产精品专区-日韩欧美国产另-日韩欧美国产免费看-日韩欧美国产免费看清风阁

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

JS技巧:Javascript函數(shù)類型判斷完美解決方案

admin
2010年8月17日 23:7 本文熱度 4239
在判斷函數(shù)類型時,我們通常使用typeof方法,一般情況下,它會得到我們所預想的效果。但是,有一些細節(jié)并不為我們所熟知。John Resig 在分析了這些細節(jié)之后,為我們提供了一個完美的解決方案,本文將作詳細介紹:

一、傳統(tǒng)方法不為人所知的細節(jié)

毫無疑問,在判斷函數(shù)類型時,我們使用的是typeof方法,比如:

function fn(){
//content
}
alert(typeof fn)//結(jié)果是"function"。

但是,該方法在一些瀏覽器中并不是像我們想像的那樣工作。

1、Firefox2和Firefox3

在這兩個瀏覽器中,用typeof檢測HTML對象元素的類型,得到是一個不精確的“function”結(jié)果,而不是“object”,如HTMLDocument。如:

alert(typeof HTMLDocument);
//在Firefox2中結(jié)果是"function";
//在Firefox3中結(jié)果是"object";

2、Firefox2

對于正則表達式,在該瀏覽器中返回的結(jié)果是“function”(在Firefox3中結(jié)果是“object”),如:

var reg = /test/;
alert(typeof reg);
//在Firefox2中結(jié)果是"function";
//在Firefox3中結(jié)果是"object";

注:本人在safari中測試,其結(jié)果也是“function”。

3、IE6和IE7

在IE中對DOM元素使用typeof方法,得到的結(jié)果是“object”。如:

alert(typeof document.getElementsByTagName("body")[0].getAttribute);
//結(jié)果是"object"

4、Safari 3

safari認為DOM元素的NodeList是一個函數(shù),如:

alert(typeof document.body.childNodes);
//結(jié)果是"function"

很明顯,如果你要測試一個對象是否為函數(shù),使用typeof方法并不能從真正意義上保證測試結(jié)果。那么,我們就需要一種在所有瀏覽器中都能保證測試結(jié)果的解決方案。我們知道function本身有apply()和call()兩種方法,但這兩個方法在IE中存在問題的函數(shù)中并不存在,試試下面的測試:

alert(typeof  document.getElementsByTagName("body")[0].getAttribute.call)
//在IE中結(jié)果是"undefined"

顯然,我們不能利用這兩個方法。

二、完美解決方案及實現(xiàn)過程

John Resig為我們提供了一個完美的解決方案,這個復雜但很穩(wěn)定的判斷一個對象是否為函數(shù)的方法如下:

function isFunction( fn ) {
 return  !!fn && !fn.nodeName && fn.constructor != String &&
  fn.constructor != RegExp && fn.constructor != Array &&
  /function/i.test( fn + "" );
}

這個函數(shù)首先保證測試的對象存在,并將其序列化成含有“function”的字符串,這個是我們檢測的基礎(chǔ)(fn.constructor != String,fn.constructor != Array, and fn.constructor != RegExp)。另外,我們需要保證聲明的函數(shù)不是一個DOM節(jié)點(fn.nodeName)。然后,我們就可以作toString測試。如果我們將一個函數(shù)轉(zhuǎn)換成字符串,在一個瀏覽器中(fn+"")給我們的結(jié)果就像這樣“function name(){...}”。現(xiàn)在,判斷它是否為函數(shù)就很簡單,僅僅只需要判斷字符串中是否包含單詞“function”。這很神奇,對于任何有問題的函數(shù),在所有瀏覽器中都能得到我們所需要的結(jié)果。這個函數(shù)較之于傳統(tǒng)的方法,運行速度有些不盡人意,作者建議我們保守使用。

John Resig 是jQuery庫的開發(fā)者,相信使用該庫的朋友們對該庫簡潔的語法和優(yōu)秀的性能并不陌生。作者除追求代碼簡潔和性能高效之外,其盡善盡美的精神也讓人嘆服。如果你是一個完美主義者,相信此文對你很有幫助。

該文章在 2010/8/17 23:07:06 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产拍精品亚洲国产高清 | 国产1区在线 | 中文字幕∨亚洲日本在线电影 | 天天综合| 日本大乳奶电影在线观看 | 精品国产拍国产天天人 | 亚洲中文字幕丝袜制服视频 | 国产在线一区二区三区欧美 | 中文字幕精品一区二区 | 亚洲人成网站观看在线播放 | 日本中文字幕a∨在线观看 欧美日韩亚洲国产高清 | 国产人成亚洲区 | 国产高清视频 | 色一情一乱一伦一区二区三区 | 最近更新中文字幕在线 | 日韩欧美在线国产一区二区 | 超清乱人 | 免费日韩电影网 | 日韩欧美在线播放视频 | 欧美在线成人怡红院 | 97超级碰碰碰碰精品 | 性感美女视频韩国 | 欧美精品亚洲 | 国产亚洲综合一区柠檬导航 | 国产在线精品一区二区三区 | 免费网站看v片在线爱的影院 | 人摸人人人澡 | 92国产福利午夜 | 深爱激情| 国产高清精品一区 | 国产精品第一页第一页 | 天天插天天 | 午夜欧美视频 | 日韩综合一卡二卡三卡死四卡 | 亚洲欧美日韩国产色另类 | 国产亚洲中文一区二区三区 | 97影院午夜午夜伦不卡 | 亚洲免费在线视频观看 | 99久9久免费国产动漫 | 亚洲va欧美va天堂v国产综合 | 国产日韩中文字幕 |