Весёлая консолька
Недавно мне пришлось отлаживать очень капризный скрипт, в котором, по ощущениям, происходили какие-то паранормальные явления. Чтобы найти проблему, понадобилось вывести в консоль браузера большое количество отладочной информации. С одной стороны, так стало удобнее искать ошибку, с другой — содержимое консоли превратилось в бесконечную колбасу однообразного текста, и с этим надо было что-то делать.
Должна сказать, что я довольно редко пишу Javascript, поэтому заинтересовавшись возможностями консоли узнала много нового.
Чтобы просто вывести что-то в консоль, используется console.log()
:
Таким образом можно выводить любые типы данных — строки, числа, массивы, объекты:
Код подсвечен, вложенные элементы объектов свёрнуты.
Как этот вывод можно улучшить? Мы видим в консоли содержимое переменных, но не видим их названий. Самый очевидный способ — добавить название перед выводимыми данными:
При этом все значения переменных приведутся к строке. Для строк и чисел это не проблема, массив потеряет подсветку, хотя и останется читабельным, а вот объект превратится в строку [object Object], и содержимое объекта теперь нельзя ни прочитать, ни развернуть.
Так себе вариант, есть способ получше: можно передавать в console.log()
список переменных, разделённых запятой, и в этом случае они будут выведены корректно:
И так тоже можно:
Передаваемые переменные можно выводить не только одну за другой, но и в более управляемом виде:
Переменные точно также передаются в функцию списком, а для их вставки в конкретное место строки используются указатели, которые заодно отвечают и за формат вывода:
%s
— в виде строки;
%d
или %i
— в виде числа;
%f
— в виде числа с плавающей точкой;
%o
— в виде разворачиваемого DOM-элемента;
%O
— в виде разворачиваемого JavaScript-объекта;
%c
— оформляет вывод с соответствии с CSS, переданным дополнительным параметром.
Переменные перед выводом в консоль приводятся к заданному формату. При этом важно правильно выбрать подходящий указатель, потому что иначе результат может получиться некорректным или просто нечитабельным:
Строка не смогла привестись к числу, и получилось NaN
, число с плавающей точкой потеряло свою десятичную часть, а массив вывелся в виде разворачиваемого объекта, и теперь придется кликнуть, чтобы увидеть его содержимое.
Форматы %o
и %O
особенно полезны для вывода элементов страницы:
В первом случае выведется код элемента, во втором — Javascript-объект. При этом если нет необходимости выводить вспомогательный текст, аналогичный результат можно получить воспользовавшись просто console.log()
и console.dir()
:
Результат работы этого кода будет таким же, как на скрине выше.
Из всех указателей мне больше всего полюбился последний: %c
— стилизующий текст, потому что именно он помог мне привести однообразную колбасу в консоли в более-менее читабельный вид.
Для того, чтобы задать оформление тексту, CSS-код нужно передать отдельным параметром, причем первым параметром в этом случае должна быть строка с указателями, вторым — строка с CSS, третьим — данные, которые нужно вывести.
Пример:
Ещё удобнее будет вынести стили в отдельную переменную, тогда их можно будет использовать повторно:
Так можно управлять отступами, фоном и оформлением текста. Какие-то штуки работать не будут, например, box-shadow
, но и того, что есть, вполне достаточно, чтобы добавить в консоль немного красоты:
Для своих целей я заготовила несколько стилей:
и функцию, которая избавила меня от необходимости формировать руками набор параметров и форматирование строки:
Пример использования:
Таким образом из вот такой колбасы скучного текста
можно получить вот такое:
По-моему, так гораздо лучше, особенно если отладочной информации много и в ней легко потеряться.
Чтобы использовать в одной строке несколько стилей, надо каждый из них указать отдельным параметром, а затем с помощью %c
задавать в тексте начало нового стиля:
Чтобы покрасить только часть строки, один из стилей можно задать пустым:
Если не хочется заморачиваться с раскрашиванием, для вывода большого количества данных можно воспользоваться console.table()
:
Может, таблица выглядит не очень читабельно, но всё же это лучше списка свёрнутых объектов, к тому же она позволяет окинуть взглядом сразу весь массив.
Также можно выделять из общего потока отдельные строчки, используя console.info()
и console.warn()
:
Они работают как обычный console.log()
, только добавляют иконки в начало строки (а console.warn()
ещё и фон).
Ещё можно выводить сообщения об ошибке и дополнительную отладочную информацию. Например, с помощью console.error()
:
console.error()
ничего не проверяет, она просто выводит сообщение, оформленное определённым образом. Чтобы сообщение выводилось только при соблюдении заданных условий, можно использовать console.assert()
:
Сообщение будет выведено только если expression
будет равно false
:
Чтобы просто вывести в консоль сообщение с отладочной информацией, можно использовать console.trace()
:
Для визуальной группировки сообщений можно использовать console.group()
и console.groupEnd()
, обозначающие начало и конец группы соответственно:
Чтобы группа была по умолчанию свёрнута, вместо console.group()
используется console.groupCollapsed()
.
А ещё можно подсчитывать вызовы функций с помощью console.count()
:
В консоли можно делать и другие интересные вещи, вроде измерения времени выполнения кода. Также умные ребята для отладки используют debugger
и точки остановки (breakpoints), но это уже совсем другая история.
- Метки:
- JS,
- инструменты