Задачка на парсинг Javascript
Хоть я и ненавижу задачки на тему “поработайте компилятором языка программирования X”, эта понравилась.
Предлагается распарсить небольшой фрагмент кода и попробовать угадать, что будет выведено в консоль, если выполнить этот код в браузере:
x
= 1
x
--> 0
Результат, на самом деле, неожиданный.
Показать ответ
1В чём же тут дело, давайте разбираться.
Приведённый фрагмент эквивалентен следующему фрагменту:
x = 1
x; // 0
Строка, начинающаяся с символов --> трактуется в JS как комментарий.
Но почему? А приветы следует направлять в начало девяностых, когда в Netscape Navigator 2 появился Javascript, и фрагменты кода следовало писать так:
<script>
<!--
alert("Hello!")
-->
</script>
Делалось это для других браузеров, которые ничего не знали про тег script, и, чтобы они не вываливали код на экран, внутренности полагалось завернуть в обычные html-комментарии <!-- ... -->, а в парсере JS, в свою очередь, был применён хак, чтобы строки <!-- и --> не вызывали ошибку скрипта и игнорировались.
К сегодняшнему дню почти не осталось бразуеров, которые не знают про тег script, но старые последовательности продолжают поддерживаться, так как в интернете полно страниц из девяностых, которые с тех пор не обновлялись. Выдавать JS-ошибку на таких страницах не хотелось бы. Вот и приходится до сих пор поддерживать такой необычный формат комментариев.