метод js завершается с ошибкой (выдает исключение?), о котором firebug не сообщает

#javascript #firebug

#javascript #firebug

Вопрос:

Следующий метод js не возвращает, однако firebug не сообщает об исключении:

 function test_contains_doesNotBailWithoutException() {
$.contains(document.getElementById('navlinks', undefined));

// This line should be reached, or you should get an exception message in Firebug.
return true;
} 
  

где navlinks — это то, что существует на странице, а $ — из jquery 1.5.1. Метод завершается (я полагаю, выбрасывает) при вызове метода contains в строке 4639 jquery1.5.1:

 return !!(a.compareDocumentPosition(b) amp; 16);
  

где a — это navlinks div, а b не определено. Разве firebug не должен сообщать об исключении в консоли?

Чтобы быть уверенным, выполнение следующего в консоли firebug не выдает ни сообщения об ошибке, ни возвращаемого результата:

 return document.getElementById('navlinks').compareDocumentPosition(undefined);
  

РЕДАКТИРОВАТЬ: я использую Firefox 4.0.1 и Firebug 1.7.1.

Ответ №1:

Да, должно быть исключение; я, конечно, получаю его с любой версией JavaScript:

 Error: uncaught exception: [Exception... "Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsIDOM3Node.compareDocumentPosition]"  nsresult: "0x80070057 (NS_ERROR_ILLEGAL_VALUE)"  location: "JS frame :: javascript:alert(document.body.compareDocumentPosition(undefined)) :: <TOP_LEVEL> :: line 1"  data: no]
  

или то же самое из версии jQuery (в вашем примере скобка установлена не в том месте… не то чтобы это имело значение, поскольку отсутствующий аргумент, естественно, будет заполнен undefined в любом случае):

 Error: uncaught exception: [Exception... "Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsIDOM3Node.compareDocumentPosition]"  nsresult: "0x80070057 (NS_ERROR_ILLEGAL_VALUE)"  location: "JS frame :: http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js :: <TOP_LEVEL> :: line 16"  data: no]