В JavaScript оператор use strict
позволяет нам выбрать строгий режим для написания и выполнения нашего кода.
Обычный JS очень дружелюбен к новичкам.
- Он не допускает синтаксических ошибок, умалчивая о них, что может привести к незамеченным ошибкам.
- Он делает много тяжелой работы по сопоставлению переменных с их идентификаторами, проверяя цепочку областей видимости для каждого имени — что требует затрат времени и памяти.
- Облегчает жизнь, считая значения параметров, заданные при определении функции, такими же, как значения, переданные функции при вызове, элементами объекта
arguments
— что иногда может сделать фактические переданные значения несущественными. - Он автобоксирует значение
this
функции и раскрывает APIFunction.prototype.caller
иFunction.prototype.arguments
, что дает доступ к вызывающей функции и объектуarguments
соответственно. Все эти три API создают проблемы с безопасностью.
Содержание
Строгий режим
Строгий режим решает эти проблемы и вносит изменения, чтобы дать разработчикам больше контроля над своим кодом. Эти изменения можно разделить на четыре категории. Ниже мы кратко рассмотрим некоторые из них в каждой категории. Для подробного объяснения и примеров кода, пожалуйста, обратитесь к этой замечательной статье на MDN
1. Изменения, связанные с ошибками, возникающими при синтаксисе и преобразовании типов
Ошибки, связанные с синтаксисом и приведением типов, приводят к ошибкам, вместо того чтобы молча игнорировать их. Их несколько.
Например,
- неправильно введенные переменные вызывают ошибку ReferenceError.
- Присвоение неперезаписываемому глобалу (например,
undefined
илиNaN
) вызывает ошибку TypeError.
Пожалуйста, обратитесь к этому разделу статьи MDN Strict Mode для получения дополнительных примеров.
2. Изменения, связанные с использованием переменных
- Сопоставление имен переменных оптимизировано за счет запрета использования
with
. - Удаление объявленных переменных запрещено.
3. Изменения, связанные с объектами eval
и arguments
.
4. Изменения, связанные с безопасностью
- Написанный код становится более безопасным за счет предотвращения автоопределения
this
. Значенияundefined
иnull
объектаthis
не автобоксируются в объект Global.
Ссылки
- Строгий режим
- Что делает «use strict» в JavaScript, и что за этим стоит?