Error - garevna/js-course GitHub Wiki

🎓 Error ()

Конструктор Error () создаёт объект Error

Конструктор принимает один необязательный параметр - текст сообщения об ошибке

( остальные опциональные параметры не были стандартизированы, и не поддерживаются браузерами )

var err = new Error ( "Arguments are not valid" )

InternalError

🎓 try ... catch

Оператор try ... catch позволяет перехватить ошибку в процессе исполнения кода

Если при выполнении кода в блоке try { ... } возникнет ошибка, управление перейдет в блок catch с передачей в качестве аргумента объекта ошибки

try {
   ... ( code )
}
catch ( err ) {
   ... ( code )
}

☕ 1

var obj = null
try {
    var x = obj.name
}
catch ( err ) {
    x = undefined
}

В этом примере при выполнении кода

var x = obj.name

должно быть сгенерировано исключение, которое приведет к прерыванию работы программы

Благодаря тому, что исключение "перехватывается" в блоке try, управление переходит в блок catch, где переменной x присваивается значение undefined, и работа программы продолжается

ES10 ( 2019 )

Теперь в блок catch не обязательно передавать аргумент:

var obj = null
try {
    var x = obj.name
}
catch {
    x = undefined
}

🎓 throw

Оператор throw генерирует пользовательское исключение ( ошибку )

Выполнение текущей функции будет прервано, и управление будет передано в первый блок catch в стеке вызовов

Если блок catch отсутствует, выполнение программы завершится

☕ 2

В результате выполнения кода:

try {
    throw new Error ( "Arguments not valid" )
} catch ( err ) {
    console.error ( `${err.name}: ${err.message}` )
}

в консоль будет выброшено исключение:

⛔️ Error: Arguments not valid 

☕ 3

var num = {}
try {
   if ( typeof num !== "number" ) {
      var err = new Error ( "Arguments not valid" )
      err.name = "ValidationError"
      throw err
   }
} catch ( err ) {
   console.error ( `${err.name}: ${err.message}` )
}

console.dir ( err )
⛔️ ValidationError: Arguments not valid
Error: Arguments not valid
        at <anonymous>:4:17
    name: "ValidationError"
    message: "Arguments not valid"
    stack: "ValidationError: Arguments not valid↵    at <anonymous>:4:17"
    ▼ __proto__:
        ► constructor: ƒ Error()
          message: ""
          name: "Error"
        ► toString: ƒ toString()
        ► __proto__: Object

☕ 4

try {
    throw ( { name: "Hi", message: "It's a joke" } )
} catch ( err ) { 
    console.log ( err.name, err.message ) 
}

☕ 5

try {
     throw ( {
          name: "Hi", 
          message: "It's a joke", 
          stack: `
              Привет,
              извините за вмешательство,
              очень хотелось поздороваться 😉
          ` 
     } )
} catch ( err ) { console.error ( err.stack ) }

finally

Этот блок кода отработает назависимо от того, чем завершился try...catch

try {
     throw ( {
          name: "Hi", 
          message: "It's a joke", 
          stack: `
              Привет,
              извините за вмешательство,
              очень хотелось поздороваться 😉
          ` 
     } )
} catch ( err ) {
     console.error ( err.stack ) 
}
finally {
     console.info ( `try...catch завершил работу` )
}

⚠️ **GitHub.com Fallback** ⚠️