以下JavaScript中的含义是什么?
var evt=event||window.event;
答案 0 :(得分:23)
这意味着变量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值为:false,0,null和undefined。
答案 1 :(得分:4)
代码是一个黑客,因为微软决定将他们的事件放在全局window.event
中,而不是将其作为参数传递给事件函数。
因此,此代码将尝试将evt
设置为传入的事件(适用于非Microsoft浏览器),如果结果为null
(因为它将是对于Microsoft浏览器),它将从全局中获取它。
从那时起,您的函数可以使用evt
忽略浏览器差异(嗯,至少与事件有关的那些)。
答案 2 :(得分:2)
var evt=event||window.event;
上面的代码是IF ELSE语句的快捷方式,相当于以下代码:
var evt = "nothing valuable yet";
if ( event ) {
evt = event;
} else {
evt = window.event;
}
Javascript中的两个IF ELSE快捷方式:
var resultIsTrue = true || false; // if first value is true, return first value
var resultIsFalse = true && false; // if first value is true, return second value