你是如何理解var e=e||window.event的

你是如何理解var e=e||window.event的?相信很多人都能給我個回答說是:為了實現多種瀏覽器兼容。

不錯,確實是為了實現瀏覽器兼容,但是它又是如何實現瀏覽器兼容的呢?

其實,如果把他寫全的話,就好理解多了吧。

function(event){

var e=event?event||window.event;

}

這樣來看的話,相信粗懂java的人都會知道了,如果存在event,那么var e=event;而如果不存在event,那么var e=window.event.這樣的話我們就可以從字面上理解了個公式的意思,也能大體猜到的確能夠實現兼容的。

但是我們再來細挖一下,它在究竟在什么瀏覽器下等于什么呢,又是為什么呢?我們先附上一個神圖:


首先:我們進行ie和其他瀏覽器的判斷

ie的document對象有一個all屬性,它的里面存放了頁面的所有標簽,而其它瀏覽器是沒有的,所以在ie中,事件對象的傳播會綁定在全局的windows上,所以ie瀏覽器肯定是都支持window.event的

其次:特殊的firefox

firefox只支持事件對象作為參數傳入,而這又恰恰是ie6/ie7/ie8所無法實現的,所以可以成功的區分這兩類,寫個實例進行測試的話,如下:


最后,就是ie9/chrome/opera/safari,則兩種方式都支持,僅憑這點很難判定瀏覽器類型

但是,只要寫上var e=event?event||window.event,我們的確是可以保證各瀏覽器的兼容的,你說對么

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容