addHandler(document, "click", function() {
document.getElementById("popupmenu_block").style.display = "none";
});
Ошибки в JavaScript и предотвращение вывода
Код:
Всё замечательно, но вот если пресловутого div#popupmenu_block в документе нечаяно нет по каким-то причинам (например, сроду не нужен был, а скрипт всё же подключен), в консоли непременно вывалится error
Код:
Ошибка: document.getElementById("popupmenu_block") is null
В PHP я подавил бы эту беду «собачкой» (@) и всё.
А есть-ли что-то подобное в JavaScript?
Код:
var o=document.getElementById("popupmenu_block");
if(o) o.style.display = "none";
if(o) o.style.display = "none";
Код:
function handleError()
{
return true;
}
window.onerror = handleError;
{
return true;
}
window.onerror = handleError;
(Не работает в половине браузеров)
Ну и try/catch
а сравнение с ПХП не правильно, так как ЖС гененрит именно ошибку, а не ворнинг, выдачу которых фильтрует @
т.е. если бы было
Код:
addHandler(document, "click", function() {
document.getElementById("popupmenu_block").style.display = "none";
/*some other important stuff*/
});
document.getElementById("popupmenu_block").style.display = "none";
/*some other important stuff*/
});
то этот stuff не выполнился бы.
try
{
...
}
catch(e)
{
...
}
P.S. Чёрт, этот JavaScript такой странный… Могли бы уж творцы за столько-то лет подшлифовать его как-то, напичкать традиционным для всех функционалом. Например ту же сортировку чисел методом .sort() сделать по-человечески как у всех.
Ну а что тут странного? Происходит запрос к встроенной функции getElementById, которая если не нашла в дереве DOM такого объекта возвращает null. Следующее за этим условие проверяет результат поиска объекта - если возвращен null - условие не выполняется, если возвращен объект - выполняется. JavaScript так себя странно порой ведет, потому что иногда свойства объектов пересчитываются (а порой и создаются) в момент обращения к ним. Просто дело привычки.