На протяжении долгого времени JavaScript развивался без проблем с обратной совместимостью. Новые функции добавлялись в язык, в то время как старая функциональность не менялась.
Преимуществом данного подхода было то, что существующий код продолжал работать. А недостатком – что любая ошибка или несовершенное решение, принятое создателями JavaScript, застревали в языке навсегда.
Так было до 2009 года, когда появился ECMAScript 5 (ES5). Он добавил новые возможности в язык и изменил некоторые из существующих. Чтобы устаревший код работал, как и раньше, по умолчанию подобные изменения не применяются. Поэтому нам нужно явно их активировать с помощью специальной директивы: "use strict"
.
«use strict»
Директива выглядит как строка: "use strict"
или 'use strict'
. Когда она находится в начале скрипта, весь сценарий работает в «современном» режиме.
Например:
"use strict";
// этот код работает в современном режиме
...
Позже мы изучим функции (способ группировки команд). Забегая вперёд, заметим, что вместо всего скрипта "use strict"
можно поставить в начале большинства видов функций. Это позволяет включить строгий режим только в конкретной функции. Но обычно люди используют его для всего файла.
Убедитесь, что «use strict» находится в начале
Проверьте, что "use strict"
находится в первой исполняемой строке скрипта, иначе строгий режим может не включиться.
Здесь строгий режим не включён:
alert("some code");
// "use strict" ниже игнорируется - он должен быть в первой строке
"use strict";
// строгий режим не активирован
Над "use strict"
могут быть записаны только комментарии.
Нет никакого способа отменитьuse strict
Нет директивы типа"no use strict"
, которая возвращала бы движок к старому поведению. Как только мы входим в строгий режим, отменить это невозможно.
Консоль браузера
В дальнейшем, когда вы будете использовать консоль браузера для тестирования функций, обратите внимание, что use strict
по умолчанию в ней выключен.
Иногда, когда use strict
имеет значение, вы можете получить неправильные результаты.
Можно использовать Shift+Enter для ввода нескольких строк и написать в верхней строке use strict
:
'use strict'; <Shift+Enter для перехода на новую строку>
// ...ваш код...
<Enter для запуска>
Всегда ли нужно использовать «use strict»?
Вопрос кажется риторическим, но это не так.
Кто-то посоветует начинать каждый скрипт с "use strict"
… Но есть способ покруче.
Современный JavaScript поддерживает «классы» и «модули» — продвинутые структуры языка (и мы, конечно, до них доберёмся), которые автоматически включают строгий режим. Поэтому в них нет нужды добавлять директиву "use strict"
.
Подытожим: пока очень желательно добавлять "use strict";
в начале ваших скриптов. Позже, когда весь ваш код будет состоять из классов и модулей, директиву можно будет опускать.
В следующих главах, по мере расширения знаний о возможностях языка, мы яснее увидим отличия между строгим и стандартным режимом. К счастью, их не так много, и все они делают жизнь разработчика лучше.