Последние учебники веб-разработки
×

JS Руководство

JS ГЛАВНАЯ JS Введение JS Куда JS Вывод JS Синтаксис JS Заявления JS Комментарии JS переменные JS операторы JS арифметика JS присваивание JS Типы данных JS функции JS Объекты JS Объем JS Мероприятия JS Строки JS Методы струнных JS чисел JS Методы Number JS математический JS Даты JS Форматы даты JS Методы Дата JS Массивы JS Методы массивов JS Booleans JS Сравнения JS условия JS переключатель JS петля For JS В то время как Loop JS Ломать JS Тип преобразования JS RegExp JS ошибки JS отладка JS Подъемно JS Строгий режим JS Гид по стилю JS Лучшие практики JS Ошибки JS Представление JS Зарезервированные слова JS JSON

JS формы

Формы проверки Формы API

JS объект

Определения объектов Свойства объекта Методы объекта Прототипы объектов

JS функции

Определения функций Функциональные параметры Функция Призвание Функция Затворы

JS HTML DOM

DOM вступление DOM методы DOM Документ DOM элементы DOM HTML DOM CSS DOM Анимации DOM Мероприятия DOM EventListener DOM навигация DOM Вершины DOM Nodelist

JS браузер BOM

JS Window JS Screen JS Location JS History JS Navigator JS Popup Alert JS Timing JS Cookies

JS Примеры

JS Примеры JS HTML DOM JS HTML вход JS HTML Объекты JS HTML Мероприятия JS браузер JS викторина JS Резюме

JS Рекомендации

JavaScript Объекты HTML DOM Объекты


 

JavaScript Строгая


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


"use strict" Директива

"use strict" директива является новым в JavaScript 1.8.5 (ECMAScript version 5) .

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

Цель "use strict" , чтобы указать , что код должен быть выполнен в "строгом режиме".

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

Строгий режим поддерживается в:
IE, начиная с версии 10. Firefox начиная с версии 4.
Chrome , начиная с версии 13. Safari , начиная с версии 5.1.
Opera с версии 12.


Декларирование строгого режима

Строгий режим объявляется добавлением "use strict"; к началу сценария или функции.

Объявленный в начале сценария, он имеет глобальную область видимости (весь код в сценарии будут выполняться в строгом режиме):

пример

"use strict";
x = 3.14;       // This will cause an error (x is not defined)
Попробуй сам "

пример

"use strict";
myFunction();

function myFunction() {
    y = 3.14;   // This will also cause an error (y is not defined)
}
Попробуй сам "

Объявленная внутри функции, она имеет локальную область видимости (только код внутри функции находится в строгом режиме):

x = 3.14;       // This will not cause an error.
myFunction();

function myFunction() {
   "use strict";
    y = 3.14;   // This will cause an error (y is not defined)
}
Попробуй сам "

"use strict"; Синтаксис

Синтаксис, для объявления строгого режима, был разработан, чтобы быть совместимым с более старыми версиями JavaScript.

Компиляция числовой литерал (4 + 5;) или строкового литерала ("John Doe";) в программе JavaScript не имеет побочных эффектов. Он просто компилирует к не существующей переменной и умирает.

Так что "use strict" ; только важно для новых компиляторов, которые "понимают" значение этого.


Почему строгого режима?

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

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

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

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

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


Не разрешено в строгом режиме

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

"use strict";
x = 3.14;                // This will cause an error (x is not defined)

Попробуй сам "

Объекты являются переменными тоже.

Использование объекта, без объявления, не допускается:

"use strict";
x = {p1:10, p2:20};      // This will cause an error (x is not defined)

Попробуй сам "

Удаление переменной (или объект) не допускается.

"use strict";
var 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";
var x = 010;             // This will cause an error

Попробуй сам "

Эскейп-символы не допускаются:

"use strict";
var x = \010;            // This will cause an error

Попробуй сам "

Запись в свойство только для чтения не допускается:

"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});

obj.x = 3.14;            // This will cause an error

Попробуй сам "

Запись к свойству Get-только не допускается:

"use strict";
var obj = {get x() {return 0} };

obj.x = 3.14;            // This will cause an error

Попробуй сам "

Удаление Undeletable свойство не допускается:

"use strict";
delete Object.prototype; // This will cause an error

Попробуй сам "

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

"use strict";
var eval = 3.14;         // This will cause an error

Попробуй сам "

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

"use strict";
var arguments = 3.14;    // This will cause an error

Попробуй сам "

С утверждением не допускается:

"use strict";
with (Math){x = cos(2)}; // This will cause an error

Попробуй сам "

По соображениям безопасности, eval() не разрешается создавать переменные в объеме , из которого она была вызвана:

"use strict";
eval ("var x = 2");
alert (x);               // This will cause an error

Попробуй сам "

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


На будущее!

Будущие зарезервированные ключевые слова не допускаются в строгом режиме. Эти:

  • implements
  • interface
  • let
  • package
  • private
  • protected
  • public
  • static
  • yield
"use strict";
var public = 1500;      // This will cause an error

Попробуй сам "


Осторожно!

Осторожно!

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