Что означает следующее в JavaScript?
var evt=event||window.event;
Что означает следующее в JavaScript?
var evt=event||window.event;
Это означает, что переменной 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.
Код взломан, потому что Microsoft решила помещать свои события в глобальный window.event
вместо передачи его в качестве параметра функции события.
Таким образом, этот код попытается установить evt
на событие, прошедшее в (которое будет работать для браузеров, отличных от Microsoft), и если это окажется null
(как и для браузеров Microsoft), он затем захватит его из глобального.
С этого момента ваша функция может просто использовать evt
без учета различий браузера (ну, по крайней мере, те, которые связаны с событиями).
var evt=event||window.event;
Вышеприведенный код является ярлыком для оператора IF ELSE и эквивалентен следующему коду:
var evt = "nothing valuable yet";
if ( event ) {
evt = event;
} else {
evt = window.event;
}
Два быстрых клавиши IF ELSE в Javascript:
var resultIsTrue = true || false; // if first value is true, return first value
var resultIsFalse = true && false; // if first value is true, return second value