Как мы бросаем и ловим RangeError, ReferenceError, TypeError в JavaScript? - PullRequest
3 голосов
/ 23 июля 2010

Мне было интересно, пытался ли кто-нибудь из вас перехватывать ошибки, такие как 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?

Потому что мой пример кода в alert (error.message) не показывает пользовательское сообщение "must be positive".

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

Best.

Ответы [ 2 ]

2 голосов
/ 15 июня 2011

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

2 голосов
/ 23 июля 2010

На самом деле индексы массивов в 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", хотя. Пожалуйста, дайте немного больше деталей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...