Задачка на парсинг 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
-ошибку на таких страницах не хотелось бы. Вот и приходится до сих пор поддерживать такой необычный формат комментариев.