JavaScript Use Strict
"use strict";
визначає, що JavaScript код має виконуватись в "строгому режимі".
Директива "use strict"
Директива "use strict"
була новою в ECMAScript версії 5.
Це не інструкція, а буквальний вираз, що ігнорується більш ранніми версіями JavaScript.
Ціль "use strict"
- вказати, що код має виконуватись в "строгому режимі".
В строгому режимі не можна, наприклад, використовувати не оголошені змінні.
Всі сучасні веббраузери підтримують "use strict" крім Internet Explorer 9 та менших версіях:
Директива | |||||
---|---|---|---|---|---|
"use strict" | 13.0 | 10.0 | 4.0 | 6.0 | 12.1 |
Цифри в таблиці вказують першу версію браузера, що повністю підтримує директиву.
Ви можете використовувати строгий режим в усіх своїх програмах. Це допомагає писати вам більш чистий код, наприклад, запобігає використанню не оголошених змінних.
"use strict"
- це просто рядок, тому IE 9 не видасть помилку навіть якщо він цього не розуміє.
Оголошення Строгого режиму
Строгий режим оголошується додаванням "use strict"; на початку скрипту чи функції.
Оголошений на початку скрипту, він має глобальну область видимості (весь код в скрипті буде виконуватись в строгому режимі):
Приклад
"use strict";
myFunction();
function myFunction() {
y = 3.14; // Це також викличе помилку, тому що y не оголошено
}
Спробуйте самі »
Оголошений в середині функції, він має локальну область видимості (лише код в середині функції знаходиться в строгому режимі):
x = 3.14; // Це не викличе помилки
myFunction();
function myFunction() {
"use strict";
y = 3.14; // Це викличе помилку
}
Спробуйте самі »
Синтаксис "use strict";
Синтаксис для оголошення строгого режиму було розроблено для сумісності зі старими версіями JavaScript.
Компіляція числового літералу (4 + 5;) або рядкового літералу ("John Doe";) в JavaScript програмі не має побічних ефектів. Він просто компілюється в змінну, що не існує та помирає.
Таким чином, "use strict";
має значення лише для нових компіляторів, котрі "розуміють" сенс цього.
Чому саме строгий режим?
Строгий режим спрощує запис "захищеного" JavaScript.
Строгий режим замінює раніше прийнятий "поганий синтаксис" на реальні помилки.
Як приклад, в звичному JavaScript неправильне введення імені змінної створює нову глобальну змінну. В строгому режимі це викличе помилку, що зробить неможливим випадкове створення глобальної змінної.
В звичному JavaScript розробник не буде отримувати ніяких повідомлень про помилки, що присвоюють значення властивостям, що не перезаписуються.
В строгому режимі будь-яке присвоєння не доступній для запису властивості, властивості лише для отримання, властивості, що не існує або об’єкту, що не існує - викличе помилку.
Не допускається в строгому режимі
Використання змінної без її оголошення не допускається:
"use strict";
x = 3.14; // Це викличе помилку
Спробуйте самі »
Використання об’єкту без його оголошення не допускається:
"use strict";
x = {p1:10, p2:20}; // Це викличе помилку
Спробуйте самі »
Видалення змінної (або об’єкту) не допускається.
"use strict";
let x = 3.14;
delete x; // Це викличе помилку
Спробуйте самі »
Видалення функції не допускається.
"use strict";
function x(p1, p2) {};
delete x; // Це викличе помилку
Спробуйте самі »
Дублювання імені параметра не допускається:
"use strict";
function x(p1, p1) {}; // Це викличе помилку
Спробуйте самі »
Вісімкові числові літерали не допускається:
"use strict";
let x = 010; // Це викличе помилку
Спробуйте самі »
вісімкові escape-символи не допускається:
"use strict";
let x = "\010"; // Це викличе помилку
Спробуйте самі »
Запис у властивість, яка доступна лише для читання не допускається:
"use strict";
const obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14; // Це викличе помилку
Спробуйте самі »
Запис у властивість лише для отримання не допускається:
"use strict";
const obj = {get x() {return 0} };
obj.x = 3.14; // Це викличе помилку
Спробуйте самі »
Видалення властивості, яку неможливо видалити, не допускається:
"use strict";
delete Object.prototype; // Це викличе помилку
Спробуйте самі »
Слово eval
не можна використовувати як змінну:
"use strict";
let eval = 3.14; // Це викличе помилку
Спробуйте самі »
Слово arguments
не можна використовувати як змінну:
"use strict";
let arguments = 3.14; // Це викличе помилку
Спробуйте самі »
Інструкція with
не допускається:
"use strict";
with (Math){x = cos(2)}; // Це викличе помилку
Спробуйте самі »
В цілях безпеки, eval()
не дозволено створювати змінні в тій області, із якої його було викликано:
"use strict";
eval ("let x = 2");
alert (x); // Це викличе помилку
Спробуйте самі »
Ключове слово this
в функціях поводить себе інакше в строгому режимі.
Ключове слово this
відноситься до об’єкту, який викликав функцію.
Якщо об’єкт не визначено, функції в строгому режимі повернуть undefined
, а функції в звичному режимі повернуть глобальний об’єкт (вікно):
"use strict";
function myFunction() {
alert(this); // виведе попередження "undefined"
}
myFunction();
Спробуйте самі »
На майбутнє!
Ключові слова, зарезервовані для майбутніх версій JavaScript, НЕ можуть використовуватись як імена змінних в строгому режимі.
А саме:
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
"use strict";
let public = 1500; // Це викличе помилку
Спробуйте самі »
Зверніть увагу!
Директива "use strict" розпізнається лише на початку скрипту або функції.