JavaScript список исключений - PullRequest
       3

JavaScript список исключений

4 голосов
/ 07 сентября 2010

На этот раз у меня нет проблем, но для любопытства я хочу знать, сколько исключений в JavaScript.

Например, я использую следующий код:

<script type="text/javascript">
    var x;
    try{
        x = 1 / 0;
        alert(x); // output: Infinity. FYI: JavaScript has Infinity property and it's value is 1.7976931348623157E+10308
        alert(funCreate());
    }
    catch(obj)
    {
        alert(obj.fileName);
        alert(obj.lineNumber);
        alert(obj.message); // output: funCreate is not defined
        alert(obj.name); // output: ReferenceError
        alert(obj.stack);
    };
</script>

здесь, ReferenceError похож на тип исключения. Так что, если оно рассматривается как тип исключения, то можем ли мы обработать исключение по типу? как мы все делаем на другом языке программирования. см ссылка .

Спасибо ...

Ответы [ 3 ]

13 голосов
/ 07 сентября 2010

Я считаю, что в JS существует шесть типов исключений:

  1. EvalError (ошибки, полученные из eval();
  2. RangeError (выдается при использовании числа, котороенаходится вне диапазона, где он используется - я фактически никогда не видел этого в реальной жизни, и я не могу произвести его сейчас);
  3. ReferenceError (производится при попыткеполучить доступ к несуществующему члену объекта по имени);
  4. SyntaxError;
  5. TypeError (когда метод ожидал значение другого типа) и
  6. URIError (создается при попытке создать или декодировать URI).

Проблема, к сожалению, заключается в том, что эти типы исключений не поддерживаются повсеместно - две большие задержки являютсяSafari и Opera. Кроме того, вы обнаружите, что lineNumber и fileName работают только на Firefox (может быть, другие?), И строки, которые вы получаете за message, будут варьироваться от браузера к браузеру.Лучше всего избегать их использования и управлять обработкой исключений вручную и более напрямую.

4 голосов
/ 07 сентября 2010

В javascript такого синтаксиса нет, но вы можете легко реализовать подобное:

var x;
try{
    x = 1 / 0;
    alert(x); // output: Infinity. FYI: JavaScript has Infinity property and it's value is 1.7976931348623157E+10308
    alert(funCreate());
}
catch(obj)
{
    switch(obj.name) {
        case 'ReferenceError':
            alert(obj.fileName);
            alert(obj.lineNumber);
            alert(obj.message); // output: funCreate is not defined
            alert(obj.name); // output: ReferenceError
            alert(obj.stack);
        break;
        case 'AnotherError':
            //do other things
        break;

        default:
           //other stuff
    }
};
3 голосов
/ 07 сентября 2010

Вы можете добавить что угодно в JavaScript, поэтому нет списка возможных исключений.Если вы хотите увидеть все свойства объекта исключения по умолчанию, я бы порекомендовал console.log() -команду firebug.

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