|
"use strict" — это директива, которая переключает ваш код в так называемый "строгий режим" (strict mode). Это современный, более безопасный способ написания JavaScript, который делает код чище и помогает избегать распространенных ошибок.
[Что это и зачем нужно]
Строгий режим был введен в стандарте ECMAScript 5 (ES5) в 2009 году. Его главная цель — сделать JavaScript более надежным и подготовить язык к будущему развитию.
Для этого он:
1. Превращает скрытые ошибки в явные: в обычном режиме некоторые неудачные действия (например, присвоение значения неизменяемому свойству) просто игнорируются. В строгом режиме они выбрасывают понятные исключения. 2. Запрещает небезопасные конструкции: например, нельзя случайно создать глобальную переменную, использовав `x = 5` без объявления. Это предотвращает трудноуловимые баги. 3. Улучшает производительность: исправляя некоторые особенности языка, строгий режим позволяет движкам JavaScript лучше оптимизировать код, что может сделать его быстрее.
[Как включить строгий режим]
Директива "use strict" — это просто строка, которую нужно написать в самом начале скрипта или функции. Старые браузеры воспримут её как обычный текст и не выдадут ошибку.
Для всего скрипта: поместите "use strict"; в первую строку файла.
"use strict"; // Весь код здесь будет работать в строгом режиме
let message = "Привет, мир!";
Важно, чтобы директива была самой первой исполняемой строкой. Если перед ней будет другой код, она не сработает.
Для отдельной функции: поместите "use strict"; в начало тела функции.
function myStrictFunction() { "use strict"; // Эта функция работает в строгом режиме
}
function myNotStrictFunction() { // А эта — в обычном
}
Важный момент: нельзя включить строгий режим в блоке кода, заключенном в фигурные скобки `{ ... }` (например, внутри if или for). Это сработает только для всего скрипта или для функции.
[Что именно меняется в коде]
Основные изменения, которые вносит строгий режим, можно разделить на несколько категорий.
| Изменение |
Обычный режим (Sloppy) |
Строгий режим (Strict) |
| Объявление переменных |
`x = 10;` создает глобальную переменную. |
`x = 10;` вызывает ошибку `ReferenceError`. |
| Ошибки при присваивании |
Попытка изменить `NaN` или свойство `length` строки просто игнорируется. |
Любая подобная попытка вызовет ошибку `TypeError`. |
| Удаление переменных |
`delete x;` для переменной `x` может работать некорректно. |
`delete x;` для переменной вызывает синтаксическую ошибку. |
| Дублирование в объектах |
`{ p: 1, p: 2 }` — последнее значение перезапишет первое. |
Дублирование имен свойств вызывает синтаксическую ошибку. |
| Значение `this` |
В функции, вызванной без контекста, `this` указывает на глобальный объект (`window`). |
`this` в такой функции будет `undefined`. |
| Конструкция `with` |
Разрешена, но запутывает код и мешает оптимизации. |
Запрещена и вызывает синтаксическую ошибку. |
| `eval()` |
Может создавать переменные во внешней области видимости. |
Создает переменные только в своей собственной области видимости, не влияя на внешний код. |
Нужно ли всегда использовать "use strict"? Краткий ответ: да, это хорошая практика.
Однако есть важный нюанс. Современные возможности JavaScript, такие как классы (Classes) и модули (Modules), автоматически включают строгий режим для всего своего содержимого. Если вы пишете код с использованием `class` или `export/import`, то добавлять директиву "use strict" в начале файла необязательно — она уже активна.
Для всех остальных случаев (например, для отдельных функций или скриптов без модулей) явное использование "use strict" остается простым и надежным способом сделать ваш код более качественным и безопасным.
|