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