你是如何理解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,我們的確是可以保證各瀏覽器的兼容的,你說對么