JavaScript中的以下内容是什么意思?
var evt=event||window.event;
Run Code Online (Sandbox Code Playgroud)
sle*_*man 24
这意味着变量evt被赋值为event或者如果event未定义则赋值为window.event.
这是如何工作的,在javascript中,布尔运算符不求值为true或false,而是求值为最后一个非falsy*或falsy值的对象的值.
所以语句首先评估表达式event || window.event.如果event为true,则表达式不需要再进行评估,因为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
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
注意:*javascript中的*falsy值为:false,0,null和undefined.
该代码是黑客,因为Microsoft决定将其事件放到全局中,window.event而不是将其作为参数传递给事件函数。
因此,此代码将尝试设置evt传入的事件(适用于非Microsoft浏览器),并且如果事实证明是如此null(适用于Microsoft浏览器),则它将从全局获取。
从那时起,您的函数就可以使用evt忽略浏览器的差异(至少,与事件有关的差异)。
| 归档时间: |
|
| 查看次数: |
10154 次 |
| 最近记录: |