一、傳統方法不為人所知的細節 毫無疑問,在判斷函數類型時,我們使用的是typeof方法,比如: 復制代碼 " /> 国产欧美精品一区二区色综合,久久久GOGO无码啪啪艺术,中文字幕在线观看网站

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

Javascript 判斷函數類型完美解決方案

但是,有一些細節并不為我們所熟知。John Resig 在分析了這些細節之后,為我們提供了一個完美的解決方案,本文將作詳細介紹:

一、傳統方法不為人所知的細節
毫無疑問,在判斷函數類型時,我們使用的是typeof方法,比如:
復制代碼 代碼如下:
function fn(){
//content
}
alert(typeof fn)//結果是"function"。

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

1、Firefox2和Firefox3
在這兩個瀏覽器中,用typeof檢測HTML對象元素的類型,得到是一個不精確的“function”結果,而不是“object”,如HTMLDocument。如:
復制代碼 代碼如下:
alert(typeof HTMLDocument);
//在Firefox2中結果是"function";
//在Firefox3中結果是"object";

2、Firefox2
對于正則表達式,在該瀏覽器中返回的結果是“function”(在Firefox3中結果是“object”),如:
復制代碼 代碼如下:
var reg = /test/;
alert(typeof reg);
//在Firefox2中結果是"function";
//在Firefox3中結果是"object";

注:本人在safari中測試,其結果也是“function”。
3、IE6和IE7
在IE中對DOM元素使用typeof方法,得到的結果是“object”。如:
復制代碼 代碼如下:
alert(typeof document.getElementsByTagName("body")[0].getAttribute);
//結果是"object"

4、Safari 3
safari認為DOM元素的NodeList是一個函數,如:
復制代碼 代碼如下:
alert(typeof document.body.childNodes);
//結果是"function"

很明顯,如果你要測試一個對象是否為函數,使用typeof方法并不能從真正意義上保證測試結果。那么,我們就需要一種在所有瀏覽器中都能保證測試結果的解決方案。我們知道function本身有apply()和call()兩種方法,但這兩個方法在IE中存在問題的函數中并不存在,試試下面的測試:
復制代碼 代碼如下:
alert(typeof document.getElementsByTagName("body")[0].getAttribute.call)
//在IE中結果是"undefined"

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

二、完美解決方案及實現過程
John Resig為我們提供了一個完美的解決方案,這個復雜但很穩定的判斷一個對象是否為函數的方法如下:
復制代碼 代碼如下:
function isFunction( fn ) {
return !!fn && !fn.nodeName && fn.constructor != String &&
fn.constructor != RegExp && fn.constructor != Array &&
/function/i.test( fn + "" );
}

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

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

JavaScript技術Javascript 判斷函數類型完美解決方案,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 青柠在线观看视频在线 | 黑人干亚洲人 | 老司机试看午夜 | 三级视频网站 | 99久久精品国产国产毛片 | 天美传媒在线完整免费观看网站 | 一本久道久久综合婷婷五月 | 甜宠溺H宝贝嗯撞PLAY啊 | 欧美日韩亚洲综合2019 | 亚洲第一页视频 | 少妇两个奶头喷出奶水了怎么办 | 99精品国产高清自在线看超 | 玖玖爱这里只有精品视频 | 美女大BXXXXN内射 | 久久视频这里只精品99热在线观看 | 久久精品国产在热亚洲完整版 | 91国内精品久久久久免费影院 | 韩国电影real在线观看完整版 | 久热在线这里只有精品7 | 伊人久久大香线蕉综合高清 | 18禁无遮遮挡羞漫画免费阅读 | 色即是空 BT | 亚洲国产日韩欧美视频二区 | 国内高清在线观看视频 | 无码人妻丰满熟妇区五十路久久 | 特级毛片全部免费播放免下载 | 精品无码一区二区三区不卡 | 欧美中文字幕一区二区三区 | 九九视频在线观看视频6 | 国产精品亚洲欧美一区麻豆 | 18岁男人女人插孔 | 夜色福利院在线看 | 麻豆AV福利AV久久AV | 激情内射亚州一区二区三区爱妻 | 4虎最新网址| 成人小视频免费在线观看 | 色欲AV色欲AV久久麻豆 | 久久9精品区-无套内射无码 | 中文字幕在线久热精品 | 亚洲欧美日本久久综合网站 | 肉动漫3D卡通无修在线播放 |