Если C++ — фундаменталистский консерватор, то Javascript — это что-то более близкое к хиппи из Северной Калифорнии. Все идет с Javascript. Хотите переназначить этот номер объекту массивов без переобъявления каких-либо переменных? Без проблем. Движок Javascript обрабатывает все это за нас. Знаете, я думаю, что пустая строка — это почти то же самое, что и 0. Давайте назовем их равными. Javascript больше относится к вседозволенности, чем к границам.

Именно такая раскованность помогает сделать Javascript доступным для начинающих. Я действительно ценю тот факт, что большую часть времени я могу полностью игнорировать типы данных и вместо этого работать на уровне интуитивно понятных понятий и имен. Но иногда вседозволенность — неприемлемая врата для пагубных ошибок. Строгий режим может помочь избежать некоторых из них.

Строгий режим — это, вообще говоря, небольшая вариация спецификации Javascript, которая запрещает определенные действия, выдавая ошибку в тех случаях, когда программа обычно работала бы молча, часто не выполняя предписанную инструкцию.

Есть аспекты строгого режима, которые никак не влияют на то, что я когда-либо делал с Javascript, поэтому я остановлюсь на тех, которые кажутся мне наиболее важными.

  1. Никаких случайных назначений global: это означает, что такие объявления, как hello = ‘world’; завершится ошибкой, если переменная hello еще не существует в глобальном объекте. В 100% случаев, когда я это делал, это потому, что я забыл var, let или const.
  2. «Это» не устанавливается автоматически, что предотвращает случайное переназначение значений глобального объекта, если он вызывается без нового ключевого слова. Когда вы вызываете конструктор с помощью new, this автоматически привязывается к новому объекту, который в конечном итоге становится объектом, созданным конструктором. Но если вы забыли слово «новый», вместо этого вы присоединили бы кучу переменных к глобальному объекту. В строгом режиме это вызовет ошибку ссылки, поскольку мы знаем, что вы не можете присвоить свойству «x» значение undefined!
  3. Ограничения уникальности: имена свойств и аргументов должны быть уникальными. В обычном скучном режиме повторяющиеся свойства и аргументы перезаписывают предыдущие. Вместо этого строгий режим выдает ошибку. Я нахожу это полезным в тех случаях, когда может возникнуть путаница в отношении того, какие свойства уже существуют в объекте.
  4. Вы не можете объявлять переменные с тем же именем, что и ключевые слова. Как ни странно, сделать это в обычном режиме можно без проблем. Но, наверное, лучше этого не делать. Примеры: реализует, интерфейс, пусть, пакет, защищенный, общедоступный, статический, выход.
  5. Последнее, что я упомяну здесь, это то, что объекту, подобному массиву аргументов, нельзя переназначать свои значения. Я нахожу это практичным. Вероятно, в любом случае не следует иметь дело с исходным массивом аргументов: скорее, нарезать его и идти оттуда. Таким образом, объект arguments всегда отражает то, что было на момент вызова функции.

Итак, вот мои выводы из изучения того, что такое строгий режим. Оказывается, не так уж и строго. Мое общее мнение таково, что вы можете иметь его или не иметь, вероятно, в любом случае это не имеет значения. Тем не менее, если вы включите его, ваш код будет выглядеть круче.