Очень долго язык JavaScript развивался без потери совместимости. Новые возможности добавлялись в язык, но старые – никогда не менялись, чтобы не «сломать» уже существующие HTML/JS-страницы с их использованием.
Однако, это привело к тому, что любая ошибка в дизайне языка становилась «вмороженной» в него навсегда.
Так было до появления стандарта ECMAScript 5 (ES5), который одновременно добавил новые возможности и внёс в язык ряд исправлений, которые могут привести к тому, что старый код, который был написан до его появления, перестанет работать.
Чтобы этого не случилось, решили, что по умолчанию эти опасные изменения будут выключены, и код будет работать по-старому. А для того, чтобы перевести код в режим полного соответствия современному стандарту, нужно указать специальную директиву use strict
.
Эта директива не поддерживается IE9-.
Директива выглядит как строка "use strict";
или 'use strict';
и ставится в начале скрипта.
Например:
use strict
никак нельзяНе существует директивы no use strict
или подобной, которая возвращает в старый режим.
Если уж вошли в современный режим, то это дорога в один конец.
В следующих главах мы будем подробно останавливаться на отличиях в работе языка при use strict
и без него.
Если говорить абстрактно, то – да, нужен. В строгом режиме исправлены некоторые ошибки в дизайне языка, и вообще, современный стандарт – это хорошо.
Однако, есть и две проблемы.
"use strict"
.Предположим, что мы, используя "use strict"
, разработали код и протестировали его в браузере Chrome. Всё работает… Однако, вероятность ошибок при этом в IE9- выросла! Он-то всегда работает по старому стандарту, а значит, иногда по-другому. Возникающие ошибки придётся отлаживать уже в IE9-, и это намного менее приятно, нежели в Chrome.
Впрочем, проблема не так страшна. Несовместимостей мало. И если их знать (а в учебнике мы будем останавливаться на них) и писать правильный код, то всё будет в порядке и "use strict"
станет нашим верным помощником.
"use strict"
.Некоторые библиотеки, которые написаны без "use strict"
, не всегда корректно работают, если вызывающий код содержит "use strict"
.
В первую очередь имеются в виду сторонние библиотеки, которые писали не мы, и которые не хотелось бы переписывать или править.
Таких библиотек мало, но при переводе давно существующих проектов на "use strict"
эта проблема возникает с завидной регулярностью.
Вывод?
Писать код с use strict
следует лишь в том случае, если вы уверены, что описанных выше проблем не будет.
Конечно же, весь код, который находится в этом учебнике, корректно работает в режиме "use strict"
.
Браузер IE8 поддерживает только совсем старую версию стандарта JavaScript, а именно ES3.
К счастью, многие возможности современного стандарта можно добавить в этот браузер, подключив библиотеку ES5 shim, а именно – скрипты es5-shim.js
и es5-sham.js
из неё.
В этой главе мы познакомились с понятием «строгий режим».
Далее мы будем предполагать, что разработка ведётся либо в современном браузере, либо в IE8- с подключённым ES5 shim. Это позволит нам использовать большинство возможностей современного JavaScript во всех браузерах.