На сегодняшней лекции мы говорили что было бы неплохо переписать код с использованием `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_
. Вобщем-то необязательно копировать всю строчку, подумайте какие переменные нужны лично вам.