В чем смысл этого... "var evt = event || window.event;"

Что означает следующее в JavaScript?

var evt=event||window.event;

Ответы

Ответ 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.

Ответ 2

Код взломан, потому что Microsoft решила помещать свои события в глобальный window.event вместо передачи его в качестве параметра функции события.

Таким образом, этот код попытается установить evt на событие, прошедшее в (которое будет работать для браузеров, отличных от Microsoft), и если это окажется null (как и для браузеров Microsoft), он затем захватит его из глобального.

С этого момента ваша функция может просто использовать evt без учета различий браузера (ну, по крайней мере, те, которые связаны с событиями).

Ответ 3

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