2010-08-16 82 views
12

JavaScript在JavaScript中的含義如下?這是什麼意思...「var evt = event || window.event;」

var evt=event||window.event; 
+0

相關:[參考錯誤:事件未在Firefox中定義錯誤](http://stackoverflow.com/q/20522887/1048572)和[爲什麼'event'變量可用,即使沒有作爲參數傳遞?](http://stackoverflow.com/q/33167092/1048572) – Bergi 2016-08-31 17:54:19

回答

21

這意味着變量evt被分配給的所述event值,或者如果event未定義它被分配的window.event值。

這是如何工作的,在JavaScript中,布爾運算符不計算爲true或false,而是計算最後一個不是falsy *或falsy值的對象的值。

因此,聲明首先評估表達event || window.event。如果event爲真,則表達式不需要進一步評估,因爲OR只需要一個成員爲真。因此返回event的值。如果event是虛假的,則需要評估OR運算符的右側以確定結果是否爲假。在這種情況下,如果window.event不是虛假的,則返回其值。

這是從事件處理程序獲取事件對象的一個​​非常常見的習慣用法。在符合標準的瀏覽器上,事件對象作爲第一個參數傳遞給事件處理程序。但在IE上,事件對象是一個全局變量。由於歷史原因,所有全局變量都是窗口對象的成員。

因此,代碼應該是這個樣子:

element.onclick = function (event) { 
    var evt = event ||  // use the value of event if available or 
      window.event;// if not assume it's IE and use window.event 

    /* ... */ 
} 

注:在javascript * falsy值是:假的,0,null和undefined。

+0

+1 for ..'historical reasons':兩個單詞來定義所有的兼容性問題,導致跨瀏覽器的圖書館事件(如'$','Prototype','YUI'等),以及爲什麼生活更容易,生活爲什麼更復雜。 – 2014-02-08 08:43:58

3

代碼是黑客,因爲微軟決定把他們的事件放在全局window.event而不是作爲參數傳遞給事件函數。

因此,此代碼將嘗試將evt設置爲傳入的事件(這將適用於非Microsoft瀏覽器),如果結果爲null(因爲它將用於Microsoft瀏覽器),它將會然後從全球抓住它。

從那時起,您的功能只需使用evt即可忽略瀏覽器差異(至少與事件相關的差異)。

2
var evt=event||window.event; 

上面的代碼是一個快捷方式的if else語句,相當於婁代碼:

var evt = "nothing valuable yet"; 
if (event) { 
    evt = event; 
} else { 
    evt = window.event; 
} 


兩個IF ELSE快捷鍵在Javascript:

var resultIsTrue = true || false; // if first value is true, return first value 
var resultIsFalse = true && false; // if first value is true, return second value