Я пишу довольно мало кода в Prototype.js, который возвращает пустой указатель, если DOM-идентификатор не был найден.
$("someId").show();
Если someId
не существует, метод назовут на пустом указателе, который останавливает всю программу, в действительности отключая все эффекты JS после ошибки. Я мог просто проверить на пустой указатель прежде, чем выполнить такой оператор, но это становится утомительным.
Я хотел бы поймать исключение, но я не уверен, который. MDC перечисляет следующие ошибочные типы Сценария ECMA, но на первом взгляде ни один из них, кажется, не то, что я хочу:
* Error
* EvalError
* RangeError
* ReferenceError
* SyntaxError
* TypeError
* URIError
* DOMException
* EventException
* RangeException
Кроме того, браузеры имеют объединенный способ иметь дело с вызовом метода на пустом указателе?
Я не верю, что можно найти единство. Chrome выдает ошибку TypeError, но IE выдает ошибку, поэтому вам, вероятно, придется уловить все и сделать серьезные предположения. Лучше сначала проверить значение null.
var element = $('someId');
if (element) {
element.show();
// whatever else...
}
Если element.show ()
- единственное, для чего он вам нужен, то его, очевидно, можно написать намного короче, но в большинстве случаев это было бы целесообразно.
Правильный способ справиться с этим - проверить значение null перед тем, как что-то делать с объектом. Есть несколько сокращенных способов сделать это, самый короткий (как писал Алекс К.)
$("someId") && $("someId").show();
, но мне кажется, что это труднее читать.
Чтобы напрямую ответить на ваш вопрос, вы можете сделать
try { $('someId').show(); } catch (e) {}
, но это кажется дилетантским. Вы должны программировать явно, потому что позже кто-то еще не узнает, почему вы написали этот странный код. Первый пример немного непрозрачен, но по крайней мере сначала содержит нулевой тест и не скрывает ошибок в методе show ()
.
Между прочим, если бы вы использовали JQuery вместо Prototype, этот код работал бы без ошибок, даже если не было объекта с идентификатором 'someId':
$('#someId').show()
Это потому, что функция $ () в JQuery возвращает коллекцию, которая может быть пусто, но никогда не бывает нулевым.
Если вы собираетесь на цепь. show ()
на $ ("someId")
, затем сначала проверьте его результат.
if ($("someId"))
$("someId").show();
or
$("someId") && $("someId").show();
or
if (someVar = $("someId"))
someVar.show();
Если по какой-то причине вам действительно нужно их идентифицировать, вы можете обернуть $ () и выдать собственное исключение:
function NullReferenceException(id) {this.id = id}
function $my(id) {
var el = $(id);
if (!el)
throw new NullReferenceException(id);
return el
}
try {
$my("iDontExistId").show();
} catch (e) {
if (e instanceof NullReferenceException)
alert(e.id + " doesn't exist");
}
Просто игнорируйте, какое это исключение ...
try
{
null.hey()
}
catch(e)
{
//handle it here
}