24 лютого 2024 р.

Сучасний режим, "use strict"

Впродовж тривалого часу JavaScript розвивався без проблем із сумісністю. До мови додавалися нові функції, а стара функціональність залишалася незмінною.

Перевагою цього було те, що чинний код не ламався. Проте, будь-яка помилка або неідеальне рішення всередені мови назавжди ставали частиною JavaScript, бо цей код не змінювався.

Так було до 2009 року, коли з’явився стандарт ECMAScript 5 (ES5). Він додав до мови новий функціонал та змінив деякі чинні правила. Щоб старий код лишався робочим, більшість таких модифікацій типово було вимкнено. Тому щоб увімкнути цей функціонал, потрібно прописати спеціальну директиву: "use strict".

“use strict”

Директива виглядає як рядок: "use strict" чи 'use strict' і дослівно перекладається як “використовувати суворий (режим)”. Якщо вона прописана на початку скрипту, він буде виконуватися у “сучасному” режимі.

Наприклад:

"use strict";

// цей код працюватиме у сучасному режимі
...

Незабаром ми будемо вивчати функції (такий собі спосіб групування команд). Забігаючи наперед, маймо на увазі, що "use strict" можна писати на початку функції. Таким чином, суворий режим буде використовуватися лише в межах цієї функції. Проте зазвичай люди використовують цей режим для всього скрипту.

Переконайтеся, що “use strict” написано зверху

Будь ласка, завжди переконуйтеся в тому, що директива "use strict" написана зверху ваших скриптів, інакше суворий режим не увімкнеться.

Тут суворий режим не спрацює:

alert("деякий код");
// "use strict" нижче alert(), і тому ігнорується -- він повинен бути зверху

"use strict";

// суворий режим не активовано

Лише коментарі можуть бути вище "use strict".

Неможливо скасувати use strict

Немає директиви на зразок "no use strict", яка могла б вернути старий режим.

Як тільки ми увімкнули суворий режим, назад дороги немає.

Консоль розробника

Коли ви використовуєте консоль розробника для виконання коду, майте на увазі, що консоль типово не використовує суворий режим.

В тих випадках, коли use strict впливає на роботу коду, ви отримаєте не правильні результати в консолі.

Як тоді увімкнути use strict в консолі?

По-перше, можна використовувати Shift+Enter, щоб ввести декілька рядків, і на початку написати use strict, ось так:

'use strict'; <Shift+Enter для нового рядка>
//  ...ваш код
<натисніть Enter, щоб виконати>

Це працюватиме в більшості браузерів, зокрема в Firefox і Chrome.

Якщо не спрацює, наприклад, в старих браузерах, тоді найнадійнішим варіантом буде використати use strict всередині функції-обгортки (хоч це, звичайно, виглядатиме дивно). Ось так:

(function() {
  'use strict';

  // ...тут буде ваш код...
})()

Чи повинні ми використовувати суворий режим?

Питання може здатися очевидним, але це не так.

Одні можуть порекомендувати ставити "use strict" на початку скриптів… Але знаєте, що круто?

Сучасний JavaScript підтримує “класи” і “модулі” – просунуті конструкції мови (ми їх, звичайно, будемо вивчати), які автоматично вмикають use strict. Тому, якщо ми використовуємо їх, нам не потрібно прописувати директиву "use strict".

Отож зараз бажано ставити "use strict"; на початку скриптів. Але пізніше, коли наш код “доросте” до класів і модулів, ми зможемо пропускати цю директиву.

Зараз ми дізнались основне про use strict.

У наступних розділах, в процесі вивчення особливостей мови, ми поговоримо про відмінності між суворим і типовим режимами. На щастя, їх не багато, але вони дійсно змінюють наше життя на краще.

Всі приклади в цьому посібнику працюють в суворому режимі, окрім випадків (дуже рідкісних), коли зазначено протилежне.

Навчальна карта