JavaScript: что поймает catch
отлавливаем ошибки и сравниваем полученные результаты в JavaScript
Итак, у нас есть две переменных и 2 блока try/catch, которые отлавливают ошибки и помещают их в указанные переменные e1
и e2
. Далее сообщения об ошибках подвергаются анализу, частичному сравнению и результат сравнения выводится на экран.
Код поставленной задачи имеет следующий вид:
let e1, e2;
try {
console.log(null.length);
} catch(e) {
e1 = e;
}
try {
console.log(undefined.length);
} catch(e) {
e2 = e;
}
console.log(e1.message.split(' ')[0] === e2.message.split(' ')[0]);
В первую очередь выясним, что попадает в переменные e1
и e2
. Для этого нужно изучить содержимое каждого блока try
. Мы видим, что null.length
и undefined.length
возвращают ошибки, так как ни null
ни undefined
не имеют свойства length
. Полученные сообщения об ошибках попадут в соответствующие блоки catch
в составе перменной e
. Далее, сообщение об ошибке для null.length
будет передано в переменную e1
, а сообщение об ошибке для undefined.length
будет передано в переменную e2
.
Полный состав сообщений об ошибках будет отличаться. В этом легко убедиться выполнив в консоли соответствующие команды:
console.log(e1);
// Cannot read property 'length' of null
console.log(e2);
// Cannot read property 'length' of undefined
Но, благодаря .split(' ')[0]
, мы сравниваем только первые слова каждого сообщения об ошибке, в обоих случаях первым словом будет Cannot
. Таким образом, конечный вид сравнения будет иметь вид:
console.log('Cannot' === 'Cannot')
Нетрудно догадаться, что в результате на экране конслои мы увидим true
.
Спасибо за внимание.