На сегодняшней лекции мы говорили что было бы неплохо переписать код с использованием `use strict’. Хотелось бы собрать более-менее полный мануал по строгому режиму. Если вы знаете то, что не знаю я - предлагайте свои правки.
Использование строгого режима в редакторе
Строгий режим есть из коробки в brackets. Может быть, вам придётся что-то доустановить или донастроить, для меня факт наличия этого инструмента оказался приятной неожиданностью. Чтобы использовать прелести строгого режима, вам нужно просто сохранить файл в *.js, в моём случае проверка кода происходит автоматически при каждом сохранении.
Использование строгого режима в коде
Режим активируется директивой "use strict"; (или 'use strict';), помещённое отдельной строчкой в начале каждой функции. “Нестрогие” функции могут работать со строгими, насчёт обратного не уверен.
Почему нужно юзать строгий режим
Для меня строгий режим оказался замечательным решением, что делать с пробельными символами, то есть в каком code-style писать. Раньше я мог писать вот так: a=1, вот так: a = 1 или даже вот так: a= 1. Теперь же у меня есть чудесное решение этой проблемы. Так же, я могу видеть недостижимые ветвления, всякие странные условия, незакрытые скобки и проблемы с форматированием. Если есть портянка кода, проходящая JSLint, начинаешь относиться к ней как к серьёзному документу, здесь каждый символ находится на строго определённом месте, в этом коде решены многие типичные проблемы JavaScript кода.
Накопленные решения
Переменные
объявляются только так и только наверху функции, сразу после директивы строгого режима: var a, b, c, answer = 42;
Доступ к свойствам
Оператор in запрещён:
if (key in object) {
val = object[key];
res[key] = val;
} // Unexpected 'in'. Compare with undefined, or use the hasOwnProperty method instead.
Вот как следует переписать этот код:
if (object.hasOwnProperty(key)) {
val = object[key];
res[key] = val;
}
console.log()
console.log(something); // console was used before it was defined
Чтобы использовать console.log(), включите devel: true в списке переменных JSLint.
Переменные JSLint
/*jslint vars: true, plusplus: true, devel: true, nomen: true, indent: 4, maxerr: 50 */ это такая строчка, которая, будучи помещённой в начале кода, взаимодействует с переменными JSLint. Например, devel: true разрешает вам использовать console.log(). Переменная plusplus: true это чтобы писать плохо, а nomen: true разрешает называть переменные _likethis_. Вобщем-то необязательно копировать всю строчку, подумайте какие переменные нужны лично вам.