Строгий режим был введен в ECMAScript 5 (ES5). Это семантически более строгая или ограниченная версия языка JavaScript, которая будет генерировать ошибки, если код не семантически правильный.

Например, в нестрогом режиме, если вы инициализируете переменную, не объявляя ее с помощью ключевого слова var (например, x = 5;), интерпретатор JavaScript будет считать, что вы ссылались на глобальную переменную, и если такой переменной не найдено, она создается автоматически. В строгом режиме вы получите ошибку.

Кроме того, устаревшие функции также могут генерировать ошибки в строгом режиме. Строгий режим уменьшает количество ошибок, повышает безопасность и общую производительность вашего приложения.

Включение строгого режима

Чтобы включить строгий режим, все, что вам нужно сделать, это просто добавить строку "use strict" в начале вашего скрипта, как показано в следующем примере:

"use strict";

// Пишем код
x = 5; // ReferenceError: x is not defined
console.log(x);

Если вы добавите директиву "use strict" в качестве первой строки вашей JavaScript-программы, строгий режим будет применяться ко всему скрипту. Но вы также можете включить строгий режим только внутри функции, например так:

x = 5;
console.log(x); // 5

function sayHello() {
    "use strict";
    str = "Hello World!"; // ReferenceError: str is not defined
    console.log(str);
}
sayHello();

Директива "use strict" распознается только в начале скрипта или функции. Все современные браузеры поддерживают директиву "use strict", кроме Internet Explorer 9 и более ранних версий. Браузеры, которые не поддерживают директиву "use strict" игнорируют ее и анализируют JavaScript в нестрогом режиме.

Общие ограничения в строгом режиме

Строгий режим меняет как синтаксис, так и поведение во время выполнения. В следующих разделах мы рассмотрим общие ограничения, которые применяются в строгом режиме:

Необъявленные переменные не допускаются

Как вы уже знаете, в строгом режиме все переменные должны быть объявлены. Если вы присвоите значение идентификатору, который не является объявленной переменной, будет сгенерирована ошибка ReferenceError.

"use strict";

function doSomething() {
    msg = "Hi, there!"; // ReferenceError: msg is not defined
    return msg;
}
console.log(doSomething());

Не разрешено удаление переменной или функции

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

"use strict";

var person = {name: "Peter", age: 28};
delete person; // SyntaxError

Аналогично, при попытке удалить функцию в строгом режиме вы получите синтаксическую ошибку:

"use strict";

function sum(a, b) {
    return a + b;
}
delete sum; // SyntaxError

Дублирование имени параметра не допускается

В строгом режиме генерируется синтаксическая ошибка, если объявление функции имеет два или более параметров с одинаковым именем. В нестрогом режиме ошибки не возникает.

"use strict";

function square(a, a) { // SyntaxError
    return a * a;
}
console.log(square(2, 2));

В строгом режиме по соображениям безопасности код, передаваемый в eval(), не может объявлять/изменять переменные или определять функции в окружающей области, как это может быть в нестрогом режиме.

"use strict";

eval("var x = 5;");
console.log(x); // ReferenceError: x is not defined

Eval и arguments не могут быть использованы в качестве идентификаторов

В строгом режиме имена eval и arguments обрабатываются как ключевые слова, поэтому их нельзя использовать в качестве имен переменных, имен функций или имен параметров функций.

"use strict";

var eval = 10; // SyntaxError
console.log(eval);

Не допускается оператор with

В строгом режиме оператор with не допускается. Оператор with добавляет свойства и методы объекта в текущую область. Таким образом, операторы, вложенные в оператор with, могут вызывать свойства и методы объекта напрямую, без ссылки на него.

"use strict";

// Without with statement
var radius1 = 5;
var area1 = Math.PI * radius1 * radius1;

// Using with statement
var radius2 = 5;
with(Math) { // SyntaxError
    var area2 = PI * radius2 * radius2;
} 

Запись в свойство только для чтения не разрешена

В строгом режиме присвоение значения не доступному для записи свойству, свойству только для получения или несуществующему свойству вызовет ошибку. В нестрогом режиме эти попытки игнорируются.

"use strict";

var person = {name: "Peter", age: 28};

Object.defineProperty(person, "gender", {value: "male", writable: false});
person.gender = "female"; // TypeError

Добавление нового свойства в нерасширяемый объект недопустимо

В строгом режиме попытки создать новые свойства для нерасширяемых или несуществующих объектов также приведут к ошибке. Но в нестрогом режиме эти попытки игнорируются.

"use strict";

var person = {name: "Peter", age: 28};

console.log(Object.isExtensible(person)); // true
Object.freeze(person); // lock down the person object
console.log(Object.isExtensible(person)); // false
person.gender = "male"; // TypeError

Восьмеричные числа не допускаются

В строгом режиме восьмеричные числа (числа, начинающиеся с нуля, например, 010, 0377) не допускаются. Тем не менее, он поддерживается во всех браузерах в нестрогом режиме. В ES6 восьмеричные числа поддерживаются префиксом числа с 0o, то есть 0o10, 0o377 и т. д.

"use strict";

var x = 010; // SyntaxError
console.log(parseInt(x));

В приведенных выше примерах ясно видно, как строгий режим может помочь вам избежать распространенных ошибок, которые часто остаются незамеченными при написании программ на JavaScript.

Использование зарезервированных ключевых слов не допускаются

Как вы уже знаете из предыдущих глав, зарезервированные слова не могут использоваться в качестве идентификатора (имена переменных, имена функций) в скриптах JavaScript. В дополнение к этому строгий режим также накладывает ограничения на использование тех ключевых слов, которые зарезервированы для будущего.

Согласно последним стандартам ECMAScript 6 (или ES6), эти ключевые слова являются зарезервированными ключевыми словами, когда они находятся в коде строгого режима: await, implements, interface, package, private, protected, public, и static. Для оптимальной совместимости вам в любом случае следует избегать использования зарезервированных ключевых слов в качестве имен переменных или имен функций в вашей программе.

Зарезервированные слова, которые также называют ключевыми словами, являются специальными словами, являющимися частью синтаксиса языка JavaScript, например, var, if, for, function и т. д. См. зарезервированные ключевые слова в JS для получения полного списка всех зарезервированных слов в JavaScript.

Похожие посты

Руководство по сортировке массивов в JavaScript

Сортировка — обычная задача при работе с массивами. Она будет использоваться, например, если вы захотите отобразить названия городов или регионов в алфавитном порядке. JavaScript массив (array) имеет встроенный метод sort() для сортировки элементов массива в алфавитном порядке. Следующий пример демонстрирует, как это работает: Реверсирование массива Вы можете использовать метод reverse(), чтобы изменить порядок элементов массива…

Руководство по массивам в JavaScript

Массивы — это сложные переменные, которые позволяют нам хранить группы значений под одним именем переменной. Массивы JavaScript могут хранить любое допустимое значение, включая строки, числа, объекты, функции и даже другие массивы, что позволяет создавать более сложные структуры данных, такие как массив объектов или массив массивов. Предположим, вы хотите сохранить название цветов в своем коде JavaScript….

Руководство по работе с атрибутами DOM в JavaScript

Атрибуты — это специальные слова, используемые внутри начального тега HTML-элемента для управления поведением тега или предоставления дополнительной информации о теге. JavaScript предоставляет несколько методов для добавления, удаления или изменения атрибутов HTML-элемента. В этом разделе мы узнаем об этих методах подробно. Получение значения атрибута элемента Метод getAttribute() используется для получения текущего значения атрибута элемента. Если указанный…

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 5 / 5. Количество оценок: 1

Оценок пока нет. Поставьте оценку первым.