亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

判定對象是否為window的js代碼

 更新時間:2010年02月21日 10:29:54   作者:  
這是一個非常有趣的題目。我們先從Object.prototype.toString入手,看能否解決它。

結(jié)果是五花八門:
[object Object]IE6
[object Object]IE8
[object Window]firefox3.6
[object Window]opera10
[object DOMWindow]safai4.04
[object global]chrome5.0.3.22
看一下赫赫有名怎樣判定,就判定它是否存在一個叫setInterval的屬性。嘖嘖,好像不太嚴謹,但也無法嚴謹下去了,因為在IE中無法判定泛化函數(shù)是否函數(shù),Object.prototype.toString.call一律打出[object Object],也沒有name屬性。由于太容易仿造,棄之不用。
無奈之下,逐一檢查其屬性,看有什么特別屬性。終于發(fā)現(xiàn)了,有一個同名的window屬性,它是無限循環(huán)引用自身。這個在IE中還點問題。

IE會彈出false,其他瀏覽器彈出true。不過下面這樣所有瀏覽器都統(tǒng)一了:

有沒有嚴謹?shù)呐卸??不要忘記window是無限循環(huán)引用自身,應(yīng)該說是引用上一個自己。因此,我們可以:

最后得出:
復(fù)制代碼 代碼如下:

var isWindow = function(obj){
return obj.window === obj.window.window
}

======================華麗的分界線=====================
感謝 Ivony提供的靈感!
復(fù)制代碼 代碼如下:

function isWindow( obj ){
if(typeof obj !== "object") return false;//必須是一個對象
var expando = "dom"+(new Date-0) //生成一個隨機變量名
//全局解析代碼,IE的eval只對原作用域有效
//詳見http://www.javaeye.com/topic/519098
//加之eval與with是 html5嚴格模式下要禁止的東西,棄之不用!
var js = document.createElement("script");
var head = document.getElementsByTagName("head")[0];
head.insertBefore(js,head.firstChild);
js.text = expando + " = {};"
head.removeChild(js)
return window[expando] === obj[expando]
}
isWindow(window)

相關(guān)文章

  • IE中document.createElement的iframe無法設(shè)置屬性name的解決方法

    IE中document.createElement的iframe無法設(shè)置屬性name的解決方法

    這篇文章主要介紹了IE中document.createElement的iframe無法設(shè)置屬性name的解決方法,需要的朋友可以參考下
    2015-09-09
  • 火狐textarea輸入法的bug的觸發(fā)及解決

    火狐textarea輸入法的bug的觸發(fā)及解決

    在firefox中,如果一個textarea獲取焦點,在輸入法激活的狀態(tài)如果這時js將該textarea的value修改,那么該textarea會直接被清空,下面是具體的解決方法,遇到類似問題的朋友可以參考下
    2013-07-07
  • cypress中豐富的調(diào)試工具使用方法

    cypress中豐富的調(diào)試工具使用方法

    這篇文章主要為大家介紹了cypress中豐富的調(diào)試工具及使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • JavaScript實現(xiàn)Tab選項卡切換

    JavaScript實現(xiàn)Tab選項卡切換

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)Tab選項卡切換效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 框架頁面高度自動刷新的Javascript腳本

    框架頁面高度自動刷新的Javascript腳本

    框架頁面高度自動刷新,加載index.htm時候,每隔1秒鐘自動調(diào)用腳本刷新框架頁面代碼,具體實現(xiàn)如下,感興趣的朋友可以了解下
    2013-11-11
  • 原生js實現(xiàn)百葉窗效果及原理介紹

    原生js實現(xiàn)百葉窗效果及原理介紹

    這篇文章主要介紹了原生javascript實現(xiàn)百葉窗效果的方法及原理介紹,感興趣的小伙伴們可以參考一下
    2016-04-04
  • js驗證框架實現(xiàn)代碼分享

    js驗證框架實現(xiàn)代碼分享

    這篇文章主要為大家分享了一個非常實用的js驗證框架實現(xiàn)源碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • javascript dragable的Move對象

    javascript dragable的Move對象

    一個dragable的Move對象,大家可以運行下,測試看下效果。
    2009-08-08
  • 詳解JavaScript中的Map和WeakMap

    詳解JavaScript中的Map和WeakMap

    Map和WeakMap都是ES6中新增的數(shù)據(jù)結(jié)構(gòu),它們的主要區(qū)別在于鍵的作用域和鍵的類型,本文就通過代碼示例給大家詳細介紹了JavaScript鍵的作用域和類型,需要的朋友可以參考下
    2023-08-08
  • JavaScript中find()和?filter()方法的區(qū)別小結(jié)

    JavaScript中find()和?filter()方法的區(qū)別小結(jié)

    js中find和filter方法大家在工作中會經(jīng)常遇到,那么他們有什么區(qū)別呢?這篇文章主要給大家介紹了關(guān)于JavaScript中find()和?filter()方法區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2021-12-12

最新評論