Строгий режим JavaScript

"use strict"; Определяет, что код JavaScript должен выполняться в "строгом режиме".

Указание "use strict"

"use strict" Это новое указание в JavaScript 1.8.5 (ECMAScript версия 5).

Это не является предложением, а является литеральным выражением, которое более ранние версии JavaScript игнорируют.

"use strict"; Его目的是 указать, что код JavaScript должен выполняться в "строгом режиме".

В строгом режиме вы не можете, например, использовать переменные, не объявленные ранее.

Следующие версии браузеров поддерживают строгий режим:

  • Версии IE после 10
  • Версии Firefox после 4
  • Версии Chrome после 13
  • Версии Safari после 5.1
  • Версии Opera после 12

Указание строгого режима

Добавлением "use strict"; Для объявления строгого режима.

Указание строгого режима в начале скрипта имеет глобальное действие домена (все код в скрипте выполняется в строгом режиме):

Пример

"use strict";
x = 3.14;       // Это вызовет ошибку, потому что x еще не была объявлена

Попробуйте сами

Пример

"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) или строковых литералов ("Bill Gates") не имеет негативных последствий. Это просто компилируется в несуществующий переменной и исчезает.

Все "use strict"; Это будет влиять только на новые компиляторы, которые "понимают" его значение.

Почему использовать строгий режим?

Строгий режим позволяет нам легче писать "безопасный" JavaScript.

Строгий режим преобразует ранее接受的 "плохую грамматику" в реальные ошибки.

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

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

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

Невозможные действия в строгом режиме

Использование переменной без объявления переменной также не разрешено:

"use strict";
x = 3.14;                // Это вызовет ошибку

Попробуйте сами

Объект также является переменной

Использование объекта без объявления объекта также не разрешено:

"use strict";
x = {p1:10, p2:20};      // Это вызовет ошибку

Попробуйте сами

Удаление переменной (или объекта) не разрешено:

"use strict";
var x = 3.14;
delete x;                // Это вызовет ошибку

Попробуйте сами

Удаление функции не разрешено:

"use strict";
function x(p1, p2) {}; 
delete x;                 // Это вызовет ошибку

Попробуйте сами

Повторение имен параметров не разрешено:

"use strict";
function x(p1, p1) {};   // Это вызовет ошибку

Попробуйте сами

Октальная числовая литера не разрешена:

"use strict";
var x = 010;             // Это вызовет ошибку

Попробуйте сами

Эскапационные символы не разрешены:

"use strict";
var x = \010;            // Это вызовет ошибку

Попробуйте сами

Запись в только чтение атрибут не разрешена:

"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14;            // Это вызовет ошибку

Попробуйте сами

Запись в атрибут, который можно только получить, не разрешена:

"use strict";
var obj = {get x() {return 0} };
obj.x = 3.14;            // Это вызовет ошибку

Попробуйте сами

Удаление неудаляемого атрибута не разрешено:

"use strict";
delete Object.prototype; // Это вызовет ошибку

Попробуйте сами

Строка "eval" не может быть использована в качестве переменной:

"use strict";
var eval = 3.14;         // Это вызовет ошибку

Попробуйте сами

Строка "arguments" не может быть использована в качестве переменной:

"use strict";
var arguments = 3.14;    // Это вызовет ошибку

Попробуйте сами

with Запрещены следующие инструкции:

"use strict";
with (Math){x = cos(2)}; // Это вызовет ошибку

Попробуйте сами

С целью безопасности не разрешается eval() Создается переменная в контексте, в котором она вызывается:

"use strict";
eval ("var x = 2");
alert (x);               // Это вызовет ошибку

Попробуйте сами

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

Гарантия будущего

Запрещены ключевые слова, зарезервированные для будущего использования. Это:

  • implements
  • interface
  • let
  • package
  • private
  • protected
  • public
  • static
  • yield
"use strict";
var public = 1500;      // Это вызовет ошибку

Попробуйте сами

Предупреждение

"use strict" Инструкции могут использоваться только в скриптах или функцияхНачалоИдентифицирован.