javascript interview question #4

Что будет выведено на экран?

.

.

.

.

.

.

.

.

.

.

.

.

.

.

У нас есть две переменные и два блока try/catch, которые должны поймать ошибки и сохранить их в переменные e1 и e2.

После этого, мы анализируем, сравниваем содержимое сообщений об ошибках и выводим результат на экран.

Первым делом, давай определим, что лежит внутри e1 и e2. Чтобы сделать это, нам нужно разобраться что происходит внутри try блоков.

Попытка доступа и к null.length, и к undefined.length бросит исключение, так как свойства length нет ни у undefined, ни у null.

Эти ошибки будут пойманы в блоках catch, как e и сохранены в переменные e1 и e2.

Содержимое ошибок будет немного отличаться. Если мы добавим логгирование и выведем e.message на экран в catch блоке, мы получим такие строки:

Cannot read property 'length' of null
Cannot read property 'length' of undefined

Дальше, .split(' ')[0] даст нам первое слово каждого предложения, которое равно Cannot в обоих случаях. Так что в конце концов, вся программа сводится к такому сравнению:

console.log('Cannot' === 'Cannot')

ОТВЕТ: Выражение внутри console.log равно true. Это сообщение и будет выведено на экран.