Учебник по JS

ГЛАВНАЯ JS Введение JS Куда Вывод JS Заявления JS JS-синтаксис JS-комментарии JS-переменные JS Пусть Константа JS JS-операторы JS-арифметика Назначение JS JS-типы данных JS-функции JS-объекты JS-события JS-строки Строковые методы JS Поиск строки JS Шаблоны строк JS JS-номера Методы номеров JS JS-массивы Методы массива JS Сортировка массива JS Итерация массива JS Константа массива JS JS-даты Форматы даты JS Методы получения даты JS Методы установки даты JS JS-математика JS Случайный JS Булевы значения Сравнение JS JS-условия JS-переключатель JS цикл для Цикл JS для входа Цикл JS для Цикл JS во время Перерыв JS JS-итерации JS-наборы JS-карты JS Typeof Преобразование типов JS JS побитовый JS регулярное выражение JS-ошибки Область JS JS-подъем Строгий режим JS JS это ключевое слово Функция стрелки JS JS-классы JS JSON JS-отладка Руководство по стилю JS Лучшие практики JS JS-ошибки JS-производительность Зарезервированные слова JS

JS-версии

JS-версии JS 2009 (ES5) JS 2015 (ES6) JS 2016 JS 2017 JS 2018 JS IE/пограничный История JS

JS-объекты

Определения объектов Свойства объекта Методы объекта Отображение объекта Средства доступа к объектам Конструкторы объектов Прототипы объектов Итерации объектов Наборы объектов Карты объектов Ссылка на объект

JS-функции

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

JS-классы

Введение в класс Наследование классов Статический класс

JS асинхронный

Обратные вызовы JS JS асинхронный JS-обещания JS асинхронный/ожидание

JS HTML DOM

Дом Введение DOM-методы Документ DOM DOM-элементы DOM HTML DOM-формы ДОМ CSS DOM-анимации События ДОМ Слушатель событий DOM DOM-навигация DOM-узлы Коллекции DOM Списки узлов DOM

Спецификация браузера JS

JS-окно JS-экран Местоположение JS История JS JS-навигатор Всплывающее оповещение JS JS Тайминг JS-куки

JS-веб-API

Введение в веб-API API веб-форм API истории веб-поиска API веб-хранилища API веб-работника API веб-выборки API веб-геолокации

JS АЯКС

Введение в АЯКС AJAX XMLHttp АЯКС-запрос AJAX-ответ XML-файл AJAX АЯКС PHP АЯКС АСП База данных AJAX AJAX-приложения Примеры AJAX

JS JSON

Введение в JSON Синтаксис JSON JSON против XML Типы данных JSON Анализ JSON Строковая JSON JSON-объекты JSON-массивы JSON-сервер JSON PHP JSON HTML JSON JSONP

JS против JQuery

Селекторы jQuery JQuery HTML jQuery CSS JQuery DOM

JS-графика

JS-графика JS Холст JS сюжет JS Chart.js JS Google Диаграмма JS D3.js

JS-примеры

JS-примеры JS HTML DOM JS HTML-ввод HTML-объекты JS HTML-события JS JS-браузер JS-редактор JS-упражнения JS-викторина JS-сертификат

JS-ссылки

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


Использование 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» распознается только в начале скрипта или функции.