嗨这个javascript片段意味着什么。(evt)部分是如此令人困惑.. evt不是布尔值。它是如何工作的?
function checkIt(evt) {
evt = (evt) ? evt : window.event
var charCode = (evt.which) ? evt.which : evt.keyCode
}
答案 0 :(得分:8)
evt = (evt) ? evt : window.event
只是inline if
syntax。它等同于这段代码:
if (evt) {
evt = evt;
} else {
evt = window.event;
}
如果evt
真实,evt
将保持不变。如果evt
不真实,则会被window.event
替换。
答案 1 :(得分:3)
它适用于事件监听器。
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)
然后代码询问{{1}}是否存在,以试图找出从哪里获取keyCode。
在evt.which
和evt.keyCode
的情况下,keydown
是您应该用于现代浏览器的内容。
答案 2 :(得分:1)
这样的赋值表达式是从从右到左计算的,所以这意味着:
evt
有 truthy 值,请将此值重新分配回evt
window.event
的值分配给evt
答案 3 :(得分:1)
这意味着:如果evt
参数有值,则保留该值,如果没有值,则使用window.event
代替。
?
和':'符号是三元if运算符的一部分:
var w = x ? y : z;
如上所述,您可以将y
或z
分配给w
,具体取决于x
是否被视为真值或假值。
如果调用了checkIt
函数而没有传入evt
参数,即checkIt()
,则函数内部evt
变量的值为undefined
在if条件中被视为false
。