嗨,这个 javascript 片段是什么意思。(evt)部分太令人困惑了。evt 不是布尔值。这个怎么运作?
function checkIt(evt) {
evt = (evt) ? evt : window.event
var charCode = (evt.which) ? evt.which : evt.keyCode
}
嗨,这个 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
存在,试图找出从哪里获取 keyCode。
在 和 的情况下,evt.keyCode
您应该在现代浏览器中使用它。keydown
keyup
像这样的赋值表达式是从右到左求值的,所以这意味着:
evt
有一个真实值,则将此值分配回evt
window.event
无论其内容如何,都将值分配给evt
这意味着:如果evt
参数有值,则保留该值,如果它没有值,则window.event
改用。
和?
':' 符号是三元 if 运算符的一部分:
var w = x ? y : z;
所以上面你分配y
或z
分配w
取决于是否x
被认为是一个真值或假值。
如果在checkIt
没有传入evt
参数的情况下调用函数,即checkIt()
在函数内部,evt
变量的值将undefined
被视为false
在 if 条件内。