Хоть я и ненавижу задачки на тему “поработайте компилятором языка программирования X”, эта понравилась.

Предлагается распарсить небольшой фрагмент кода и попробовать угадать, что будет выведено в консоль, если выполнить этот код в браузере:

x
= 1
x
--> 0

Результат, на самом деле, неожиданный.

Показать ответ 1




В чём же тут дело, давайте разбираться.

Приведённый фрагмент эквивалентен следующему фрагменту:

x = 1
x; // 0

Строка, начинающаяся с символов --> трактуется в JS как комментарий.

Но почему? А приветы следует направлять в начало девяностых, когда в Netscape Navigator 2 появился Javascript, и фрагменты кода следовало писать так:

<script>
<!--
alert("Hello!")
-->
</script>

Делалось это для других браузеров, которые ничего не знали про тег script, и, чтобы они не вываливали код на экран, внутренности полагалось завернуть в обычные html-комментарии <!-- ... -->, а в парсере JS, в свою очередь, был применён хак, чтобы строки <!-- и --> не вызывали ошибку скрипта и игнорировались.

К сегодняшнему дню почти не осталось бразуеров, которые не знают про тег script, но старые последовательности продолжают поддерживаться, так как в интернете полно страниц из девяностых, которые с тех пор не обновлялись. Выдавать JS-ошибку на таких страницах не хотелось бы. Вот и приходится до сих пор поддерживать такой необычный формат комментариев.

MDN