精品秘无码一区二区三区老师-精品秘一区二三区免费雷安-精品蜜桃秘一区二区三区-精品蜜桃秘一区二区三区粉嫩-精品蜜桃一区二区三区-精品蜜臀国产aⅴ一区二区三区

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

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

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

一、傳統(tǒng)方法不為人所知的細(xì)節(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

對于正則表達(dá)式,在該瀏覽器中返回的結(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認(rèn)為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"

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

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

John Resig為我們提供了一個完美的解決方案,這個復(fù)雜但很穩(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é)點(diǎn)(fn.nodeName)。然后,我們就可以作toString測試。如果我們將一個函數(shù)轉(zhuǎn)換成字符串,在一個瀏覽器中(fn+"")給我們的結(jié)果就像這樣“function name(){...}”。現(xiàn)在,判斷它是否為函數(shù)就很簡單,僅僅只需要判斷字符串中是否包含單詞“function”。這很神奇,對于任何有問題的函數(shù),在所有瀏覽器中都能得到我們所需要的結(jié)果。這個函數(shù)較之于傳統(tǒng)的方法,運(yùn)行速度有些不盡人意,作者建議我們保守使用。

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

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

主站蜘蛛池模板: WW网站女生福利 | 国产又色又爽又黄的男女免费 | 久久99国内精品自在现线 | 亚洲日韩小电影在线观看 | 国产av无码专区亚洲av毛片搜 | 国产av一区二区精品凹凸 | 国产成人在线网站 | 亚洲国产丝袜美腿在线播放 | 午夜中文字幕屏蔽 | 无码精品a∨在线观看无广告欧美影院完整版最新国自产 | 中文字幕无码av不卡一区 | 国产真实乱人伦视频 | 中文字幕久久精 | 亚洲日韩欧美明星在线观看 | 久久免费国产视频 | 色综合久久五月 | 丝瓜视频未满十八严禁 | 十八岁以下禁止观看黄下载链接 | 免费看麻豆文化传媒 | 性色国产成人久久久精品一区二区 | 特级做a爰片毛片免费69 | 四虎精品国产永久免费地址 | 日韩人妻精品久久日 | 亚洲AV综合AV一区久久久妖精 | 欧美高清性xxxxhdvideosex | 91久久午夜无码鲁丝片午夜精品aaa | 91制服丝袜在线 | 苍井空无高清码在线观看 | 人妻精品久久中文字幕 | 亚洲精品久久无码AV片动漫网站 | 国产成人午夜精品影院 | 五月天婷婷网址 | 国产成人剧情av麻豆果冻 | 欧美成人精品三级在线观看 | 国产成人久久精品流白浆 | 亚洲熟女久久色 | 91精品免费久久久久久久久 | 色偷拍亚洲国产大姐 | 免费极品av一视觉盛宴 | 国产精品天天狠天天看 | 国产乱子乱人伦电影在线观看 |