evt = (evt) 的含义 ?EVT : 窗口事件.



这个JavaScript片段是什么意思?(evt)部分是如此令人困惑; evt不是布尔值。它是如何工作的?

function checkIt(evt) {
        evt = (evt) ? evt : window.event
        var charCode = (evt.which) ? evt.which : evt.keyCode
        
    }

evt = (evt) ? evt : window.event只是内联if语法。它等效于以下代码:

if (evt) {
    evt = evt;
} else {
    evt = window.event;
}

如果evt是真实的,evt将被单独留下。如果evt不真实,它将替换为window.event

它适用于事件侦听器。

IE6-IE8使用与W3C标准完全不同的事件方法。

当事件触发时,W3C 标准浏览器将在回调中传递事件对象:

function keyPressed (e) { /* do stuff with e */ }

在您的情况下,它是keydown(或使用keyCode的其他东西)。
IE不支持此功能,而是具有每次发生事件时都会更新window.event

因此,您的函数正在检查对象是否已传入其中:

evt = (evt) ? evt : window.event;
// does `evt` exist, and is it anything but '', 0, false, null, undefined, NaN
// yes: evt = itself (W3C)
// no: evt = window.event (IE6-8)

然后代码询问evt.which是否存在,以尝试找出从哪里获取密钥代码。 evt.keyCode是您应该用于现代浏览器的,在 keydownkeyup .

像这样的赋值表达式是从右到左计算的,所以这意味着:

  • 如果evt具有真实值,请将此值分配回evt
  • 如果没有,请将 window.event 的值(无论其内容如何)分配给evt

这意味着:如果 evt 参数有值,则保留该值,如果它没有值,则改用window.event

?和 ':" 符号是三元 if 运算符的一部分:

var w = x ? y : z;

因此,在上面,您将yz分配给w,具体取决于x被认为是真值还是假值。

如果在没有传入evt参数的情况下调用checkIt函数,即 checkIt()函数内部,evt变量的值将具有 undefined 的值,该值在 if 条件中被视为false

最新更新