Javascript “这是什么意思?”;var evt=event | | window.event&引用;

Javascript “这是什么意思?”;var evt=event | | window.event&引用;,javascript,Javascript,以下内容在JavaScript中是什么意思 var evt=event||window.event; 这意味着变量evt分配给事件的值,或者如果事件未定义,则分配给窗口事件的值 其工作原理是,在javascript中,布尔运算符的计算结果不是true或false,而是最后一个不是falsy*的对象的值或falsy值 因此,语句首先计算表达式event | | window.event。如果event为true,则表达式不需要进一步求值,因为OR只需要一个成员为true。因此,将返回事件的值。如

以下内容在JavaScript中是什么意思

var evt=event||window.event;

这意味着变量
evt
分配给
事件的值
,或者如果
事件
未定义,则分配给
窗口事件的值

其工作原理是,在javascript中,布尔运算符的计算结果不是true或false,而是最后一个不是falsy*的对象的值或falsy值

因此,语句首先计算表达式
event | | window.event
。如果
event
为true,则表达式不需要进一步求值,因为OR只需要一个成员为true。因此,将返回
事件
的值。如果
事件
为falsy,则需要评估OR运算符右侧的结果,以确定结果是否为false。在这种情况下,如果
window.event
不为false,则返回其值

这是从事件处理程序获取事件对象的一种非常常见的习惯用法。在符合标准的浏览器上,事件对象作为第一个参数传递给事件处理程序。但在IE上,事件对象是一个全局变量。由于历史原因,所有全局变量都是window对象的成员

所以代码应该是这样的:

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和未定义。

该代码是一个黑客行为,因为Microsoft决定将其事件放在全局
窗口中。event
而不是将其作为参数传递给event函数

因此,此代码将尝试将
evt
设置为传入的事件(适用于非Microsoft浏览器),如果结果为
null
(适用于Microsoft浏览器),它将从全局数据库中获取它

从那时起,您的函数可以只使用
evt
,而不考虑浏览器差异(至少是与事件相关的差异)

上面的代码是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

+1因为..
历史原因
:用两个词来定义所有的兼容性问题,结果跨浏览器库发生(如
$
原型
,“YUI”等),以及为什么生活更容易,为什么生活更复杂。相关:和
var resultIsTrue = true || false; // if first value is true, return first value
var resultIsFalse = true && false; // if first value is true, return second value