Использование JavaScript строго
"use strict";
Определяет, что код JavaScript должен выполняться в «строгом режиме».
Директива «использовать строгую»
Эта "use strict"
директива была новой в ECMAScript версии 5.
Это не утверждение, а буквальное выражение, игнорируемое более ранними версиями JavaScript.
Цель "use strict"
состоит в том, чтобы указать, что код должен выполняться в «строгом режиме».
В строгом режиме нельзя, например, использовать необъявленные переменные.
Все современные браузеры поддерживают «строгое использование», кроме Internet Explorer 9 и ниже:
Directive | |||||
---|---|---|---|---|---|
"use strict" | 13.0 | 10.0 | 4.0 | 6.0 | 12.1 |
Цифры в таблице указывают на первую версию браузера, которая полностью поддерживает директиву.
Вы можете использовать строгий режим во всех своих программах. Это помогает вам писать более чистый код, например, предотвращает использование необъявленных переменных.
"use strict"
это просто строка, поэтому IE 9 не выдаст ошибку, даже если он ее не понимает.
Объявление строгого режима
Строгий режим объявляется добавлением «use strict»; в начало скрипта или функции.
Объявленный в начале скрипта, он имеет глобальную область действия (весь код в скрипте будет выполняться в строгом режиме):
Пример
"use strict";
x = 3.14; // This will cause an error
because x is not declared
Пример
"use strict";
myFunction();
function myFunction() {
y = 3.14; // This will also cause an error
because y is not declared
}
Объявленный внутри функции, он имеет локальную область видимости (только код внутри функции находится в строгом режиме):
x = 3.14; // This will not cause an error.
myFunction();
function
myFunction() {
"use strict";
y = 3.14; // This will cause an error
}
«Использовать строго»; Синтаксис
Синтаксис для объявления строгого режима был разработан для совместимости со старыми версиями JavaScript.
Компиляция числового литерала (4 + 5;) или строкового литерала ("John Doe";) в программе JavaScript не имеет побочных эффектов. Он просто компилируется в несуществующую переменную и умирает.
Так "use strict";
что имеет значение только для новых компиляторов, которые «понимают» его значение.
Почему строгий режим?
Строгий режим упрощает написание «безопасного» JavaScript.
Строгий режим изменяет ранее принятый «плохой синтаксис» на настоящие ошибки.
Например, в обычном JavaScript опечатка в имени переменной создает новую глобальную переменную. В строгом режиме это вызовет ошибку, что сделает невозможным случайное создание глобальной переменной.
В обычном JavaScript разработчик не получит никаких сообщений об ошибках при присвоении значений недоступным для записи свойствам.
В строгом режиме любое присвоение недоступному для записи свойству, свойству только для получения, несуществующему свойству, несуществующей переменной или несуществующему объекту вызовет ошибку.
Не разрешено в строгом режиме
Использование переменной без ее объявления не допускается:
"use strict";
x = 3.14; // This will cause an error
Объекты тоже переменные.
Использование объекта без его объявления не допускается:
"use strict";
x = {p1:10, p2:20}; // This will cause an error
Удаление переменной (или объекта) не допускается.
"use strict";
let x = 3.14;
delete x; // This
will cause an error
Удаление функции запрещено.
"use strict";
function x(p1, p2) {};
delete x;
// This will cause an error
Дублирование имени параметра не допускается:
"use strict";
function x(p1, p1) {}; // This will cause an error
Восьмеричные числовые литералы не допускаются:
"use strict";
let x = 010; // This
will cause an error
Восьмеричные escape-символы не допускаются:
"use strict";
let x = "\010"; // This will cause an error
Запись в свойство только для чтения не допускается:
"use strict";
const obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14; // This
will cause an error
Запись в свойство только для чтения не допускается:
"use strict";
const obj = {get x()
{return 0} };
obj.x = 3.14; // This
will cause an error
Удаление неудаляемого свойства не допускается:
"use strict";
delete Object.prototype; // This will cause an error
Слово eval
нельзя использовать в качестве переменной:
"use strict";
let eval = 3.14; // This will cause an error
Слово arguments
нельзя использовать в качестве переменной:
"use strict";
let arguments = 3.14; // This will cause an error
Заявление with
не допускается:
"use strict";
with (Math){x = cos(2)}; // This will cause an error
Из соображений безопасности eval()
не разрешено создавать переменные в области видимости, из которой она была вызвана:
"use strict";
eval ("let x = 2");
alert (x); // This
will cause an error
Ключевое this
слово в functions ведет себя иначе в строгом режиме.
Ключевое this
слово относится к объекту, вызвавшему функцию.
Если объект не указан, функции в строгом режиме вернутся, undefined
а функции в обычном режиме вернут глобальный объект (окно):
"use strict";
function myFunction() {
alert(this); // will alert "undefined"
}
myFunction();
На будущее!
Ключевые слова, зарезервированные для будущих версий JavaScript, НЕ могут использоваться в качестве имен переменных в строгом режиме.
Эти:
- реализует
- интерфейс
- позволять
- упаковка
- частный
- защищенный
- публичный
- статический
- урожай
"use strict";
let public = 1500; // This will cause an error
Осторожно!
Директива «use strict» распознается только в начале скрипта или функции.