JavaScript在JavaScript中的含義如下?這是什麼意思...「var evt = event || window.event;」
var evt=event||window.event;
JavaScript在JavaScript中的含義如下?這是什麼意思...「var evt = event || window.event;」
var evt=event||window.event;
這意味着變量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。
+1 for ..'historical reasons':兩個單詞來定義所有的兼容性問題,導致跨瀏覽器的圖書館事件(如'$','Prototype','YUI'等),以及爲什麼生活更容易,生活爲什麼更復雜。 – 2014-02-08 08:43:58
代碼是黑客,因爲微軟決定把他們的事件放在全局window.event
而不是作爲參數傳遞給事件函數。
因此,此代碼將嘗試將evt
設置爲傳入的事件(這將適用於非Microsoft瀏覽器),如果結果爲null
(因爲它將用於Microsoft瀏覽器),它將會然後從全球抓住它。
從那時起,您的功能只需使用evt
即可忽略瀏覽器差異(至少與事件相關的差異)。
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
相關:[參考錯誤:事件未在Firefox中定義錯誤](http://stackoverflow.com/q/20522887/1048572)和[爲什麼'event'變量可用,即使沒有作爲參數傳遞?](http://stackoverflow.com/q/33167092/1048572) – Bergi 2016-08-31 17:54:19