Ответ 1
Это означает, что переменной evt
присваивается значение event
или если event
- undefined ей присваивается значение window.event
.
Как это работает, так это то, что в javascript логические операторы не оценивают true или false, но вместо этого оценивают значение последнего объекта, который не является ложным * или значением фальшивки.
Итак, оператор сначала оценивает выражение event || window.event
. Если event
истинно, то выражение не нужно оценивать дальше, так как 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 IE and use window.event
/* ... */
}
Примечание: * значения фальши в javascript: false, 0, null и undefined.