Что означает директива use strict

Переход к строгому режиму

Цель этой статьи: предоставить для разработчиков руководство по переходу к строгому режиму.

Постепенный переход

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

Различия non-strict и strict режимов

Синтаксические ошибки

При добавлении «use strict»; следующие случаи вызывают SyntaxError до выполнения скрипта:

Эти ошибки хороши тем, что обличают скользкие, едва уловимые ошибки и плохие практики написания кода.

Новые ошибки времени выполнения (runtime errors)

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

Установка значения необъявленной переменной

Здесь изменяется значение глобального объекта, что редко является ожидаемым эффектом. Если вы действительно хотите изменить значение глобального объекта, передайте его в качестве аргумента функции и явно присвойте его как свойство:

Попытка удалить неконфигурируемое свойство

В нестрогом режиме этот код может молчаливо выполниться неудачей и ничего не сделать, вопреки ожиданиям.

Отравленные аргументы (arguments) и свойства функции

может быть переписан как:

Семантические различия

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

this в вызовах функции

arguments не является псевдонимом именованных аргументов функции

В нестрогом режиме изменение значения в объекте arguments изменяло соответствующий именованный аргумент функции. Это усложняло оптимизацию кода для движков JavaScript и сам код становился менее читабельным и понятным. В строгом режиме объект arguments создаётся и инициализируется с теми же значениями, что и именованные аргументы, но изменения объекта arguments или именованных аргументов теперь никак не влияют друг на друга.

Изменения в eval

В строгом режиме eval не создаёт новой переменной в той области видимости, где был вызван. Также, конечно, в строгом режиме, строка выполняется с правилами строгого режима. Потребуется провести тщательное тестирование, чтобы убедиться, что ничего не сломалось. Не использовать eval, если он вам действительно не нужен, может быть другим прагматичным решением.

Строго-нейтральный код

Источник

JavaScript Использовать строгие

«использовать строго»; Определяет, что код JavaScript должен выполняться в «строгом режиме».

Директива «use strict»

Директива «use strict» является новой в JavaScript 1.8.5 (ECMAScript версия 5).

Это не инструкция, а литеральное выражение, игнорируемое более ранними версиями JavaScript.

Цель «использовать строго» означает, что код должен быть выполнен в «строгом режиме».

В строгом режиме вы не можете, например, использовать необъявленные переменные.

Строгий режим поддерживается в:
IE от версии 10. Firefox из версии 4.
Хром из версии 13. Safari от версии 5,1.
Опера от версии 12.

Объявление строгого режима

Строгий режим объявляется путем добавления «use strict»; в начало скрипта или функции.

Объявленный в начале скрипта, он имеет глобальную область видимости (весь код в скрипте будет выполняться в строгом режиме):

Пример

Пример

function myFunction() <
y = 3.14; // This will also cause an error because y is not declared
>

Объявленный внутри функции, он имеет локальную область видимости (только код внутри функции находится в строгом режиме):

x = 3.14; // This will not cause an error.
myFunction();

function myFunction() <
«use strict»;
y = 3.14; // This will cause an error
>

«использовать строго»; Синтаксис

Синтаксис для объявления строгого режима был разработан для совместимости со старыми версиями JavaScript.

Компиляция числового литерала (4 + 5;) или строкового литерала («John Doe»;) в программе JavaScript не имеет побочных эффектов. Он просто компилируется в несуществующую переменную и умирает.

Так «использовать строгий»; только вопросы к новым составителям которые «понимают» смысль его.

Почему строгий режим?

Строгий режим облегчает написание «безопасного» JavaScript.

Строгий режим изменяет ранее принятый «плохой синтаксис» в реальные ошибки.

В качестве примера, в обычном JavaScript, опечатка имя переменной создает новую глобальную переменную. В строгом режиме это приведет к ошибке, что сделает невозможным случайное создание глобальной переменной.

В обычном JavaScript разработчик не получает никаких отзывов об ошибках, присвоив значения незаписываемым свойствам.

В строгом режиме любое присваивание незаписываемому свойству, свойству только для чтения, несуществующему свойству, несуществующей переменной или несуществующему объекту приведет к ошибке.

Не допускается в строгом режиме

Использование переменной без ее объявления не допускается:

Объекты также являются переменными.

Использование объекта без его объявления не допускается:

Удаление переменной (или объекта) не допускается.

Удаление функции недопустимо.

Не допускается дублирование имени параметра:

Восьмеричной числовые литералы не допускаются:

Восьмеричной escape-символы не допускаются:

Запись в свойство только для чтения не допускается:

obj.x = 3.14; // This will cause an error

Запись в свойство только для получения не допускается:

obj.x = 3.14; // This will cause an error

Удаление неудаляемого свойства недопустимо:

Строка «eval» не может использоваться в качестве переменной:

Строка «аргументы» не может использоваться в качестве переменной:

Оператор WITH не допускается:

По соображениям безопасности eval () не разрешается создавать переменные в области, из которой он был вызван:

В вызовах функций, таких как f (), это значение было глобальным объектом. В строгом режиме он теперь не определен.

Будущее доказательство!

Ключевые слова, зарезервированные для будущих версий JavaScript, не могут использоваться в качестве имен переменных в строгом режиме.

Осторожно!

Директива «use strict» распознается только в начале скрипта или функции.

Источник

use strict

Время чтения: 5 мин

Обновлено 20 декабря 2021

Кратко

«use strict» включает строгий режим выполнения JavaScript. Эта строка должна располагаться в самом начале скрипта, иначе строгий режим не будет работать. В строгом режиме интерпретатор будет явно выбрасывать ошибки на действия, которые ранее пропускал. Если строгий режим был включён, то отключить его для файла уже нельзя.

Пример

Как это понять

Строгий режим был введён в JavaScript со стандартом ECMAScript 5 в 2009 году.
Этот стандарт добавил много нового в язык, но чтобы старые браузеры могли продолжать работать, был введён специальный строгий режим выполнения, который включал новые функции языка.

Строгий режим делает следующее:

Давайте подробнее посмотрим некоторые важные ограничения, которые накладывает включение строгого режима.

Нельзя использовать переменные без объявления

Интерпретатор в строгом режиме выбросит ошибку, если обратиться к переменной без её объявления:

Явная ошибка если значение поля нельзя изменить или удалить

С помощью методов Object.defineProperty или Object.preventExtensions в JavaScript можно запретить перезаписывать поля объекта. При включённом строгом режиме попытка перезаписать поле приведёт к ошибке.

Ошибка будет выброшена в строгом режиме и при попытке удаления поля из объекта, когда это сделать нельзя.

Если запустить все примеры кода выше без строгого режима, они выполнятся без ошибок, но значения полей не изменятся.

Параметры функции не могут иметь одинаковые имена

Если в функции объявить два параметра с одинаковым именем, то строгий режим выбросит ошибку выполнения.

Без use strict интерпретатор выполнит код без ошибок, но обратиться к переопределённому параметру будет невозможно.

Другое поведение this

При включённом строгом режиме this больше не будет по умолчанию ссылаться на глобальный объект.

Без use strict если вызывать функцию в глобальном контексте (например в консоли браузера), то this всегда будет ссылаться на глобальный объект.

Запрещено использовать зарезервированные слова

Ограничение небезопасных конструкций

Как пишется

Все современные сборщики JavaScript умеют самостоятельно добавлять «use strict» в файлы. Потому в данный момент обычно никто в коде явно не объявляет строгий режим. А с появлением в JavaScript модулей все они по умолчанию работают в строгом режиме.

«use strict» называется директивой, так как это не просто строка, а специальная инструкция для интерпретатора. Потому очень важно поместить объявление строгого режима в самом начале скрипта, чтобы это была самая первая строчка, которая исполнится.

Если поместить строку ниже, то включение строгого режима не произойдёт.

Над «use strict» можно размещать только комментарии.

Источник

JavaScript Строгий

Директива «use strict»; определяет, что код JavaScript должен выполняться в «строгом режиме».

Директива «строгое использование»

Директива «use strict» нового в ECMAScript версии 5

Это не утверждение, а буквальное выражение, игнорируемое более ранними версиями JavaScript.

В строгом режиме нельзя, например, использовать необъявленные переменные.

Все современные браузеры поддерживают использование строгого режима, кроме Internet Explorer 9 и ниже:

Директива
«use strict»13.010.04.06.012.1

Числа в таблице указывают первую версию браузера, полностью поддерживающую директиву.

Вы можете использовать строгий режим во всех своих программах. Это помогает вам писать более чистый код, например, предотвращая использование необъявленных переменных.

«use strict» это просто строка, поэтому IE 9 не выдаст ошибку, даже если он ее не понимает.

Объявление строгого режима

Строгий режим объявляется добавлением «use strict»; в начало скрипта или функции.

Объявленный в начале скрипта, он имеет глобальную область видимости (весь код в скрипте будет выполняться в строгом режиме):

Пример

Пример

function myFunction() <
y = 3.14; // Это также вызовет ошибку, потому что y не объявлен
>

Объявленный внутри функции, он имеет локальную область видимости (только код внутри функции находится в строгом режиме):

x = 3.14; // Это не вызовет ошибки.
myFunction();

function myFunction() <
«use strict»;
y = 3.14; // Это вызовет ошибку
>

Синтаксис «строгое использование»;

Синтаксис для объявления строгого режима был разработан для совместимости со старыми версиями JavaScript.

Компиляция числового литерала (4 + 5;) или строкового литерала («John Doe»;) в программе JavaScript не имеет побочных эффектов. Он просто компилируется в несуществующую переменную и умирает.

Так что это «use strict»; имеет значение только для новых компиляторов, которые «понимают» его значение.

Почему строгий режим?

Строгий режим упрощает написание «безопасного» JavaScript.

Строгий режим изменяет ранее принятый «плохой синтаксис» на реальные ошибки.

Например, в обычном JavaScript неправильный ввод имени переменной создает новую глобальную переменную. В строгом режиме это вызовет ошибку, что сделает невозможным случайное создание глобальной переменной.

В обычном JavaScript разработчик не будет получать никаких сообщений об ошибках, присваивающих значения неперезаписываемым свойствам.

В строгом режиме любое присвоение свойству, не допускающему записи, свойству только для получения, несуществующему свойству, несуществующей переменной или несуществующему объекту, вызовет ошибку.

Не разрешено в строгом режиме

Использование переменной без ее объявления не допускается:

Объекты тоже переменные.

Использование объекта без его объявления не допускается:

Удаление переменной (или объекта) не допускается.

Удаление функции не допускается.

Дублирование имени параметра не допускается:

Восьмеричные числовые литералы не допускаются:

Восьмеричные escape-символы не допускаются:

Запись в свойство read-only не разрешена:

obj.x = 3.14; // Это вызовет ошибку

Запись в свойство get-only не допускается: Writing to a get-only property is not allowed:

obj.x = 3.14; // Это вызовет ошибку

Удаление свойства, которое невозможно удалить, запрещено:

Слово eval нельзя использовать как переменную:

Слово arguments нельзя использовать как переменную:

Заявление with не допускается:

По соображениям безопасности eval() не разрешено создавать переменные в области, из которой он был вызван:

Ключевое слово this в функции ведет себя по-разному в строгом режиме.

Ключевое слово this относится к объекту, который вызвал функцию.

Если объект не указан, функции в строгом режиме вернутся, undefined функции в нормальном режиме вернут глобальный объект (окно):

На будущее!

Ключевые слова, зарезервированные для будущих версий JavaScript, НЕ могут использоваться в качестве имен переменных в строгом режиме.

Осторожно!

Директива «use strict» распознается только в начале скрипта или функции.

Источник

Use strict, что это? Зачем в JavaScript нужен строгий режим?

Что означает директива use strict. Смотреть фото Что означает директива use strict. Смотреть картинку Что означает директива use strict. Картинка про Что означает директива use strict. Фото Что означает директива use strict

Use strict JavaScript — это модель разработки, которая часто используется в современном программировании на JavaScript. Главная особенность этого режима, что он дает возможность разработчикам использовать только ограниченный синтаксис и не допускать лишних ошибок.

Синтаксис «строгого режима» отличается от традиционного синтаксиса JavaScript. В нем не проходят многие ошибки, которые легко пройдут в стандартном. Поэтому очень часто стандартный синтаксис называют «грязным», от того что в нем многие мелкие ошибки игнорируются. Такое «игнорирование» — это не всегда плохо. В мелких проектах молодых разработчиков оно ни к чему плохому не приводит. Но если проект большой, то наличие в коде «мелких» ошибок иногда может привести к непредсказуемым результатам. И чтобы этого не произошло, разработчики применяют режим use strict при разработке на языке JavaScript.

Строгий режим не даст системе закрыть глаза на «тихие» ошибки и заставит ее остановить процесс выполнения программы в случае их обнаружения. То есть этот режим дает возможность писать программы, в которых не будет недочетов.

Use strict в JavaScript

Use strict в JavaScript может применяться ко всему документу сразу или к отдельным его функциям. Для того чтобы включить этот режим в документе, необходимо в нужном месте разместить выражение «Use strict» в одинарных или двойных кавычках.

Когда нет желания подключать весь документ к строгому режиму, нужно осторожно относит ь ся к чередованию «строгих» или «нестрогих» функций в документе. Иногда в такой смеси под «строгий режим» попадает код функции, которая для этого не рассчитана. И наоборот, код, который должен быть в «строгом» режиме, попадает под «нестрогий».

Отличия «use strict» и стандартный режим в JavaScript

Применение « U se strict» вносит следующие изменения в JavaScript:

При режиме «strict» к неопределенной переменной не присваивается значение.

Нельзя применить инструкцию «with».

Нет возможности добавить повторяющиеся свойства в литерале объекта.

Нет возможности добавить дополнительные параметры формальной функции.

Когда изменяется объект «arguments», не изменяются аргументы.

Когда аргумент является неизменяемым свойством объекта, то «delete» выдаст ошибку.

Нет возможности преобразовать «this» в объект.

Нет возможности изменять «eval» и «arguments», а также применять их в качестве имени.

Увеличенное количество слов, которые зарезервировали для будущего применения.

Нет возможности использовать восьмеричную систему.

Нет возможности применять конструкции кода, которые могут затруднить оптимизацию самого кода.

Нельзя объявить переменную в коде, который был передан методу «eval».

Нельзя удалить обычные переменные.

Заключение

Use strict в JavaScript — это то, что делает код чище и безопасней. Этот режим существует уже очень долго и поддерживается всеми современными браузерами. Проблемы с этим режимом могут возникнуть только в старых версиях Internet Explorer.

Use strict в JavaScript часто используется для лучшей оптимизации программы, а также для поиска «тихих» ошибок, которые могут давать неоднозначные результаты.

Мы будем очень благодарны

если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *