Что нужно знать о ‘strict mode’ в JavaScript

Заметки в помощь пытающимся понять суть “strict mode“.

  • применяется ко всему скрипту или к отдельным функциям
  • одинарные или двойные обрамляющие кавычки – не важно
  • кидает ошибку(ReferenceError) при создании глобальной переменной 
  • предотвращает попытку присвоения NaN, undefined значения(TypeError)
  • предотвращает попытку переопределения свойства объекта, закрытого для переопределения (TypeError)
  • вернет ошибку(TypeError) при попытке удалить неудаляемое свойство
  • останавливает интерпретацию кода (SyntaxError) при объявлении в объекте 2 одинаковых ключей (без strict – просто переопределяет значение вторым)
  • предотвращает дупликацию имен параметров при объявлении метода
  • выключает восьмиричный способ задания переменных типа number(SyntaxError )
  • запрещает оператор with (SyntaxError )
  • входящие параметры функции не связаны с arguments (т.е. изменение arguments, не ведет к изменению параметра)
  • свойство arguments.callee недоступно (TypeError)
  • this будет undefined, если контекст не определен (а не window), если контекст определен примитивом, то this будет объект-обертка примитива (String, Boolean, Number…)
  • появляются новые зарезервированные слова – implements, interface, let, package, private, protected, public, static, yield – которые нельзя использовать (SyntaxError)
  • нельзя(SyntaxError) использовать функциональное объявление (functional declaration) внутри условных конструкций (или грубо говоря не на верхнем уровне).

Полезная литература