这是什么意思......“var evt = event || window.event;”

时间:2010-08-16 12:22:28

标签: javascript

以下JavaScript中的含义是什么?

var evt=event||window.event;

3 个答案:

答案 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