Почему не может быть операция ИЛИ "||" замените тернарный оператор "?:" в этом JavaScript-коде?
В браузере работает следующий код:
var event = event || window.event;
var eTarget = event.target || event.srcElement;
var eTargetId = eTarget.id;
Когда я меняю его на
var eTargetId = event.target ? event.target.id : event.srcElement.id;
он тоже работает.
Когда я меняю код на
var eTargetId = event.target.id || event.srcElement.id;
он не работает в IE 678. Я получаю следующую ошибку:
SCRIPT5007: ожидаемый объект.
Почему это происходит?
Ответы
Ответ 1
Не пытайтесь прочитать свойство, если вы не проверили базовое значение, это действительно объект, а не null.
Обычно можно было бы сделать
var eTargetId = event.target && event.target.id || event.srcElement.id;
Или, если возможно, что цель события не имеет идентификатора,
var eTargetId = event.target && event.target.id
|| event.srcElement && event.srcElement.id
|| "";
Ответ 2
Вероятно, это происходит потому, что event.target
имеет значение null, но event
- нет. Первые две попытки используют короткое замыкание, чтобы предотвратить дальнейшую оценку, если event.target
имеет значение null.
Ответ 3
Оцените event
, event.target
и event.srElement
сначала
var eTargetId = ((event = event || window.event)
&& (eTargetId = event.target || event.srcElement)
&& eTargetId["id"]) || void 0;