2010-07-23 6 views
3

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

Лучший.

ответ

2

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

2

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

+0

https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/TypeError – DjangoRocks

+0

Просто остановитесь на этом, и я должен исправить вас: 'new Array (-1)' IS недопустим. Хотя вы правильно указываете, что индексы не должны быть положительными, первым аргументом конструктора «Array» является количество элементов внутри массива после создания (все по умолчанию «undefined») и по умолчанию равны нулю. Очевидно, вы не можете создать массив с менее чем 0 элементами в нем. (Также не так, что использование отрицательных индексов в массивах Javascript не будет корректировать свойство 'length', поскольку оно указывает на самый высокий положительный индекс, который использовался. Вот почему в большинстве случаев имеет смысл не допускать их) –

 Смежные вопросы

  • Нет связанных вопросов^_^