Javascript “这是什么意思?”;var evt=event | | window.event&引用;
以下内容在JavaScript中是什么意思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。因此,将返回事件的值。如
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