Протягом тривалого часу JavaScript розвивався без проблем із зворотною сумісністю. Нові функції додавалися до мови, тоді як стара функціональність не змінювалася.
Перевагою цього підходу було те, що існуючий код продовжував працювати. А недоліком – будь-яка помилка або недосконале рішення, прийняте творцями JavaScript, застрягли в мові назавжди.
Це було до 2009 року, коли з’явився ECMAScript 5 (ES5). Він додав нові можливості в мову та змінив деякі з існуючих. Щоб застарілий код працював, як і раніше, подібні зміни за замовчуванням не застосовуються. Тому нам потрібно їх активуваи за допомогою спеціальної директиви: “use strict”.
“use strict”
Директива виглядає як рядок:
“use strict” чи ‘use strict’. Коли вона знаходиться на початку скрипту, весь сценарій працює у «сучасному» режимі.
Наприклад:
"use strict";
// цей код працює у сучасному режимі
...
Переконайтеся, що «use strict» знаходиться на початку. Перевірте, що «use strict» знаходиться в першому рядку скрипта, що виконується, інакше строгий режим може не включитися.
Тут жорсткий режим не включений:
alert("some code");
// "use strict" нижче ігнорується - він має бути в першому рядку
"use strict";
// суворий режим не активовано
Над “use strict” можуть бути записані лише коментарі.
Немає жодного способу скасувати use strict
Немає директиви типу “no use strict”, яка повертала б двигун до старої поведінки.
Як тільки ми входимо до суворого режиму, скасувати це неможливо.
Консоль браузера
Надалі, коли ви будете використовувати консоль браузера для тестування функцій, зверніть увагу, що use strict за замовчуванням вимкнено.
Іноді, коли use strict має значення, можна отримати неправильні результати.
Можна використовувати Shift+Enter для введення кількох рядків та написати у верхньому рядку use strict:
'use strict'; <Shift+Enter для переходу на новий рядок>
// ...ваш код...
<Enter для запуска>
У більшості браузерів, включаючи Chrome та Firefox, це працює.
У старих браузерах консоль не враховує таких use strict, там можна «обертати» код у функцію, ось так:
(function() {
'use strict';
// ...ваш код...
})()
Чи потрібно використовувати use strict?
Питання видається риторичним, але це не так.
Хтось порадить починати кожен скрипт із “use strict”… Але є спосіб крутіший.
Сучасний JavaScript підтримує «класи» та «модулі» — просунуті структури мови (і ми, звичайно, до них доберемося), які автоматично включають суворий режим. Тому в них немає потреби додавати директиву “use strict”.
Підсумуємо: поки що дуже бажано додавати “use strict”; на початку ваших скриптів. Пізніше, коли весь код буде складатися з класів і модулів, директиву можна буде опускати.
Поки ми дізналися про use strict тільки загалом.
У наступних розділах, з розширенням знань про можливості мови, ми ясніше побачимо відмінності між строгим і стандартним режимом. На щастя їх не так багато і всі вони роблять життя розробника кращим.
Усі приклади у цьому підручнику мають на увазі виконання у строгому режимі, крім випадків (дуже рідкісних), коли обумовлено інше.