Строгий режим JavaScript
- Предыдущая страница JS Hoisting
- Следующая страница Ключевое слово JS this
"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"
Инструкции могут использоваться только в скриптах или функцияхНачалоИдентифицирован.
- Предыдущая страница JS Hoisting
- Следующая страница Ключевое слово JS this