Use strict javascript object

use strict

‘use strict’ включает строгий режим выполнения JavaScript. Эта строка должна располагаться в самом начале скрипта, иначе строгий режим не будет работать. В строгом режиме интерпретатор будет явно выбрасывать ошибки на действия, которые ранее пропускал. Если строгий режим был включён, то отключить его для файла уже нельзя.

Пример

Скопировать ссылку «Пример» Скопировано

 'use strict' // Располагаем строку в самом начале файла! const name = 'Alex'// . другой код 'use strict' // Располагаем строку в самом начале файла! const name = 'Alex' // . другой код      

Как понять

Скопировать ссылку «Как понять» Скопировано

Строгий режим был введён в JavaScript со стандартом ECMAScript 5 в 2009 году.
Этот стандарт добавил много нового в язык, но чтобы старые браузеры могли продолжать работать, был введён специальный строгий режим выполнения, который включал новые функции языка.

Строгий режим делает следующее:

  • Выбрасывает ошибки, когда в коде используются некоторые небезопасные конструкции.
  • Выключает функции языка, которые запутывают код и потому не должны использоваться.
  • Предотвращает использование слов, которые могут быть использованы в качестве ключевых в будущем.

Давайте подробнее посмотрим некоторые важные ограничения, которые накладывает включение строгого режима.

Нельзя использовать переменные без объявления

Скопировать ссылку «Нельзя использовать переменные без объявления» Скопировано

Интерпретатор в строгом режиме выбросит ошибку, если обратиться к переменной без её объявления:

 'use strict' const name = 'Anna'console.log(name)// Anna age = 24console.log(age)// Uncaught ReferenceError: age is not defined 'use strict' const name = 'Anna' console.log(name) // Anna age = 24 console.log(age) // Uncaught ReferenceError: age is not defined      

Без строгого режима интерпретатор в таком случае создаст переменную age в глобальной области видимости. Если выполнять код из примера в консоли браузера без ‘use strict’ , то все выполнится без ошибок, а в глобальный объект window запишется поле age со значением 24 .

Явная ошибка если значение поля нельзя изменить или удалить

Скопировать ссылку «Явная ошибка если значение поля нельзя изменить или удалить» Скопировано

С помощью методов Object . define Property ( ) или Object . prevent Extensions ( ) в JavaScript можно запретить перезаписывать поля объекта. При включённом строгом режиме попытка перезаписать поле приведёт к ошибке.

 'use strict' const obj = <> Object.defineProperty(obj, 'someProp', < value: 'Alex', writable:false >) console.log(obj.someProp)// Alex obj.someProp = 'James'// Uncaught TypeError: Cannot assign to read only property 'someProp' of object # 'use strict' const obj = > Object.defineProperty(obj, 'someProp',  value: 'Alex', writable:false >) console.log(obj.someProp) // Alex obj.someProp = 'James' // Uncaught TypeError: Cannot assign to read only property 'someProp' of object #     
 'use strict' const notExtensableObj = <> Object.preventExtensions(notExtensableObj) notExtensableObj.someProp = 'Value'// Uncaught TypeError: Can't add property someProp, object is not extensible 'use strict' const notExtensableObj = > Object.preventExtensions(notExtensableObj) notExtensableObj.someProp = 'Value' // Uncaught TypeError: Can't add property someProp, object is not extensible      

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

 const obj = <> Object.defineProperty(obj, 'someProp',  value: 'Anna', configurable: false>) delete obj.someProp// Uncaught TypeError: Cannot delete property 'someProp' of # const obj = > Object.defineProperty(obj, 'someProp',  value: 'Anna', configurable: false >) delete obj.someProp // Uncaught TypeError: Cannot delete property 'someProp' of #     

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

Параметры функции не могут иметь одинаковые имена

Скопировать ссылку «Параметры функции не могут иметь одинаковые имена» Скопировано

Если в функции объявить два параметра с одинаковым именем, то строгий режим выбросит ошибку выполнения.

 'use strict' // Uncaught SyntaxError: Duplicate parameter name not allowed in this contextfunction sum(a, b, a)  // . > 'use strict' // Uncaught SyntaxError: Duplicate parameter name not allowed in this context function sum(a, b, a)  // . >      

Без use strict интерпретатор выполнит код без ошибок, но обратиться к переопределённому параметру будет невозможно.

 function sum(a, b, a)  console.log(a) console.log(b)> sum(1, 2, 3) // Выведет 3 и 2, первый аргумент потерян навсегда function sum(a, b, a)  console.log(a) console.log(b) > sum(1, 2, 3) // Выведет 3 и 2, первый аргумент потерян навсегда      

Другое поведение this

Скопировать ссылку «Другое поведение this» Скопировано

При включённом строгом режиме this больше не будет по умолчанию ссылаться на глобальный объект.

 'use strict' function logThis()  console.log(this)> logThis()// Выведет undefined 'use strict' function logThis()  console.log(this) > logThis() // Выведет undefined      

Без use strict если вызывать функцию в глобальном контексте (например в консоли браузера), то this всегда будет ссылаться на глобальный объект.

Запрещено использовать зарезервированные слова

Скопировать ссылку «Запрещено использовать зарезервированные слова» Скопировано

В строгом в режиме запрещено использовать в коде некоторые слова, которые были специально зарезервированы для того, чтобы использовать их в будущем. Это слова implements , interface , let , package , private , protected , public , static , yield . Некоторые из этих слов уже используется в данный момент: например объявление переменных через let или возвращение значения из генератора с помощью yield .

Ограничение небезопасных конструкций

Скопировать ссылку «Ограничение небезопасных конструкций» Скопировано

Дополнительно включение строгого режима не позволяет использовать в коде конструкцию with и очищает переменные, созданные с помощью eval ( ) . Обе эти конструкции устарели и являются потенциально опасными, потому не используются в современном JavaScript.

Как пишется

Скопировать ссылку «Как пишется» Скопировано

Все современные сборщики JavaScript умеют самостоятельно добавлять ‘use strict’ в файлы. Потому в данный момент обычно никто в коде явно не объявляет строгий режим. А с появлением в JavaScript модулей все они по умолчанию работают в строгом режиме.

‘use strict’ называется директивой, так как это не просто строка, а специальная инструкция для интерпретатора. Потому очень важно поместить объявление строгого режима в самом начале скрипта, чтобы это была самая первая строчка, которая исполнится.

 'use strict' // Включили строгий режим // Далее остальной код 'use strict' // Включили строгий режим // Далее остальной код      

Если поместить строку ниже, то включение строгого режима не произойдёт.

 console.log(1 + 2)// 3 'use strict' // Просто объявление строки, строгий режим не включился // Код ниже работает без строгого режима console.log(1 + 2) // 3 'use strict' // Просто объявление строки, строгий режим не включился // Код ниже работает без строгого режима      

Над ‘use strict’ можно размещать только комментарии.

Источник

Строгий режим — «use strict»

На протяжении долгого времени JavaScript развивался без проблем с обратной совместимостью. Новые функции добавлялись в язык, в то время как старая функциональность не менялась.

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

Так было до 2009 года, когда появился ECMAScript 5 (ES5). Он добавил новые возможности в язык и изменил некоторые из существующих. Чтобы устаревший код работал, как и раньше, по умолчанию подобные изменения не применяются. Поэтому нам нужно явно их активировать с помощью специальной директивы: «use strict» .

«use strict»

Директива выглядит как строка: «use strict» или ‘use strict’ . Когда она находится в начале скрипта, весь сценарий работает в «современном» режиме.

"use strict"; // этот код работает в современном режиме . 

Позже мы изучим функции (способ группировки команд). Забегая вперёд, заметим, что вместо всего скрипта «use strict» можно поставить в начале большинства видов функций. Это позволяет включить строгий режим только в конкретной функции. Но обычно люди используют его для всего файла.

Проверьте, что «use strict» находится в первой исполняемой строке скрипта, иначе строгий режим может не включиться.

Здесь строгий режим не включён:

alert("some code"); // "use strict" ниже игнорируется - он должен быть в первой строке "use strict"; // строгий режим не активирован

Над «use strict» могут быть записаны только комментарии.

Нет директивы типа «no use strict» , которая возвращала бы движок к старому поведению.

Как только мы входим в строгий режим, отменить это невозможно.

Консоль браузера

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

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

Итак, как можно включить use strict в консоли?

Можно использовать Shift + Enter для ввода нескольких строк и написать в верхней строке use strict :

В большинстве браузеров, включая Chrome и Firefox, это работает.

Если этого не происходит, например, в старом браузере, есть некрасивый, но надежный способ обеспечить use strict . Поместите его в следующую обёртку:

Всегда ли нужно использовать «use strict»?

Вопрос кажется риторическим, но это не так.

Кто-то посоветует начинать каждый скрипт с «use strict» … Но есть способ покруче.

Современный JavaScript поддерживает «классы» и «модули» — продвинутые структуры языка (и мы, конечно, до них доберёмся), которые автоматически включают строгий режим. Поэтому в них нет нужды добавлять директиву «use strict» .

Подытожим: пока очень желательно добавлять «use strict»; в начале ваших скриптов. Позже, когда весь ваш код будет состоять из классов и модулей, директиву можно будет опускать.

Пока мы узнали о use strict только в общих чертах.

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

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

Источник

Читайте также:  Как поставить на фон картинку в HTML
Оцените статью