5 вересня 2020 р.

Сучасний режим, "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 в загальному.

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

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

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

Коментарі

прочитайте це, перш ніж коментувати…
  • Якщо у вас є пропозиції, щодо покращення підручника, будь ласка, створіть обговорення на GitHub або одразу створіть запит на злиття зі змінами.
  • Якщо ви не можете зрозуміти щось у статті, спробуйте покращити її, будь ласка.
  • Щоб вставити код, використовуйте тег <code>, для кількох рядків – обгорніть їх тегом <pre>, для понад 10 рядків – використовуйте пісочницю (plnkr, jsbin, codepen…)