欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

判斷對(duì)象是否Window的實(shí)現(xiàn)代碼

 更新時(shí)間:2012年01月10日 01:20:16   作者:  
判斷對(duì)象是否Window的實(shí)現(xiàn)代碼,需要的朋友可以參考下。
直入正題吧.
先看jQuery的$.isWindow函數(shù):

復(fù)制代碼 代碼如下:

function isWin(obj){
return obj && typeof obj === 'object' && 'setInterval' in obj;
}

這個(gè)函數(shù)本身是很科學(xué)的, 它主要是通過檢查目標(biāo)對(duì)象是否擁有setInterval屬性來判斷.
然而問題在于, 在缺少約定的情況下, 它也許并不太可靠, 比如:

復(fù)制代碼 代碼如下:

var o={xx:'oo'};
o['setInterval']=true;
console.log( isWin(o) ); // true

上例通過給對(duì)象字面量添加setInterval屬性, 欺詐成功.
而事實(shí)上, 任何一個(gè)非null的Object都可以如此偽裝, 比如數(shù)組:

復(fù)制代碼 代碼如下:

var arr=[1,2,3];
arr['setInterval']=true;
console.log( isWin(arr) ); // true

相比上面的屬性屬性檢查, 一個(gè)更為妥善的方法是使用對(duì)象的toString函數(shù)來判斷:

復(fù)制代碼 代碼如下:

function isWin(obj){
return Object.prototype.toString.call(obj)==='[object Window]'
}

以上函數(shù)在標(biāo)準(zhǔn)瀏覽器中妥妥的, 但同時(shí)又帶來了新的兼容問題:

復(fù)制代碼 代碼如下:

// ie6-8中的結(jié)果
Object.prototype.toString.call(window)==='[object Window]'; // false
Object.prototype.toString.call(window)==='[object Object]'; // true
// chrome
Object.prototype.toString.call(window)==='[object global]'; // true
// safari
Object.prototype.toString.call(window)==='[object DOMWindow]'; // true

果然, 主要的問題又是來自萬惡的ie們. 所幸天無絕人之路, 這又讓我想起了ie中的一個(gè)靈異事件:

復(fù)制代碼 代碼如下:

// 下面兩行, 信不信?
console.log( window==document ); // true
console.log( document==window ); // false

寫到這里, 我想最終的解決方案已經(jīng)出來了:

復(fù)制代碼 代碼如下:

function isWin(obj){
return/Window|global/.test({}.toString.call(obj))||obj==obj.document&&obj.document!=obj;
}

相關(guān)文章

  • jQuery實(shí)現(xiàn)每日秒殺商品倒計(jì)時(shí)功能

    jQuery實(shí)現(xiàn)每日秒殺商品倒計(jì)時(shí)功能

    這篇文章主要介紹了 jQuery實(shí)現(xiàn)每日秒殺商品倒計(jì)時(shí)功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • jquery隊(duì)列queue與原生模仿其實(shí)現(xiàn)方法分享

    jquery隊(duì)列queue與原生模仿其實(shí)現(xiàn)方法分享

    jquery中的queue和dequeue是一組很有用的方法,他們對(duì)于一系列需要按次序運(yùn)行的函數(shù)特別有用。特別animate動(dòng)畫,ajax,以及timeout等需要一定時(shí)間的函數(shù)
    2014-03-03
  • 輕松學(xué)習(xí)jQuery插件EasyUI EasyUI創(chuàng)建樹形菜單

    輕松學(xué)習(xí)jQuery插件EasyUI EasyUI創(chuàng)建樹形菜單

    這篇文章主要幫助大家輕松學(xué)習(xí)jQuery插件EasyUI,EasyUI創(chuàng)建樹形菜單,內(nèi)容很豐富,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2015-11-11
  • jQuery dateRangePicker插件使用方法詳解

    jQuery dateRangePicker插件使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了jQuery dateRangePicker插件的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • jQuery實(shí)現(xiàn)簡(jiǎn)單的文件上傳進(jìn)度條效果

    jQuery實(shí)現(xiàn)簡(jiǎn)單的文件上傳進(jìn)度條效果

    這篇文章主要為大家詳細(xì)介紹了jQuery實(shí)現(xiàn)簡(jiǎn)單的文件上傳進(jìn)度條效果,上傳文件時(shí)顯示上傳進(jìn)度條,以百分比的形式顯示上傳進(jìn)度,感興趣的小伙伴們可以參考一下
    2015-11-11
  • jquery trigger函數(shù)執(zhí)行兩次的解決方法

    jquery trigger函數(shù)執(zhí)行兩次的解決方法

    這篇文章主要介紹了jquery trigger函數(shù)執(zhí)行兩次的解決方法,詳細(xì)分析了trigger函數(shù)執(zhí)行兩次的原因與響應(yīng)的解決技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2016-02-02
  • jQuery中focus事件用法實(shí)例

    jQuery中focus事件用法實(shí)例

    這篇文章主要介紹了jQuery中focus事件用法,以實(shí)例形式分析了獲取焦點(diǎn)時(shí)focus事件的使用技巧,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-12-12
  • 淺析onsubmit校驗(yàn)表單時(shí)利用ajax的return false無效問題

    淺析onsubmit校驗(yàn)表單時(shí)利用ajax的return false無效問題

    前幾天,在校驗(yàn)一個(gè)表單數(shù)據(jù)用到ajax時(shí),遇到 return false 無效問題,以下就是對(duì)這個(gè)問題進(jìn)行了分析介紹,需要的朋友可以參考下
    2013-07-07
  • JQuery通過鍵盤控制鍵盤按下與松開觸發(fā)事件

    JQuery通過鍵盤控制鍵盤按下與松開觸發(fā)事件

    這篇文章主要介紹了JQuery通過鍵盤控制鍵盤按下與松開觸發(fā)事件,文章通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • jQuery實(shí)現(xiàn)放大鏡案例

    jQuery實(shí)現(xiàn)放大鏡案例

    這篇文章主要為大家詳細(xì)介紹了jQuery實(shí)現(xiàn)放大鏡案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10

最新評(píng)論