Как мы выбрасываем и перехватываем RangeError, ReferenceError, TypeError в JavaScript?

Мне интересно, пробовал ли кто-нибудь из вас перехватывать такие ошибки, как RangeError, ReferenceError и TypeError, используя механизм обработки исключений JavaScript?

Например, для RangeError:

try {
var anArray = new Array(-1); 
// an array length must be positive

         throw new RangeError("must be positive!")
}
catch (error) {  
         alert(error.message);
         alert(error.name);
}
finally {
         alert("ok, all is done!");
}

В приведенном выше случае я выбрасываю новый объект RangeError?

Потому что мой пример кода в предупреждении (error.message) не показывает определяемое пользователем сообщение «должно быть положительным».

Что я могу сделать, чтобы создать свой собственный объект RangeError (и ReferenceError, TypeError)?

Лучший.


person DjangoRocks    schedule 23.07.2010    source источник


Ответы (2)


Это почти год, но я думаю, что лучше поздно, чем никогда. Это зависит от браузера, но в некоторых случаях (кашель, кашель, FIREfox, кашель) RangeError наследует свойство message объекта Error вместо предоставления собственного. Боюсь, единственный обходной путь — выкинуть new Error("must be positive!"). Извиняюсь.

person JURU    schedule 15.06.2011

На самом деле индексы массивов в JavaScript не обязательно должны быть положительными, поскольку здесь массивы по сути являются хеш-таблицами. Если вы попытаетесь получить доступ к несуществующему ключу в массиве, результатом будет просто undefined.

Вы можете поймать это с помощью простого условия:

if (typeof someArray[foo] !== "undefined") {
    //do stuff
} else {
    //do error handling
    //Here I'm just throwing a simple exception with nothing than a message in it.
    throw new Error('something bad happened');
}

Однако я не уверен, что вы подразумеваете под «TypeError». Пожалуйста, дайте более подробную информацию.

person selfawaresoup    schedule 23.07.2010
comment
comment
Просто наткнулся на это, и я должен поправить вас: new Array(-1) НЕдействителен. Хотя вы правы в том, что индексы не обязательно должны быть положительными, первый аргумент конструктора Array — это количество элементов внутри массива после создания (все по умолчанию равны undefined) и по умолчанию равны нулю. Очевидно, вы не можете создать массив с менее чем 0 элементами. (Кроме того, использование отрицательных индексов в массивах Javascript не приведет к корректировке свойства length, так как оно указывает самый высокий положительный индекс, который использовался. Вот почему в большинстве случаев имеет смысл не разрешать их) - person Johannes H.; 21.05.2016