Использовать console.log(message) очень просто - аргумент message выводится в консоль.

console.log('My message');
// logs "My message"

const myVar = 12;
console.log(myVar);
// logs 12

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

1. Именование выводимых переменных

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

Например, давайте выведем некоторые переменные:

function sum(a, b) {
  console.log(b);
  return a + b;
}

sum(1, 2);
sum(4, 5);

Когда приведенный выше код будет выполнен, вы увидите только выведенные числа:

DevTools

Чтобы связать между собой выводимую переменную и ее значение, оберните переменную в пару фигурных скобок {b}:

function sum(a, b) {
  console.log({ b });
  return a + b;
}

sum(1, 2);
sum(4, 5);

Теперь, глядя в консоль, вы можете видеть, что именно выводится именно переменная b:

DevTools

2. Продвинутое форматирование

Самый распространенный способ вывести что-либо в консоль - просто вызвать console.log() с одним аргументом:

console.log('My message');
// logs "My message"

Иногда вам может понадобиться лог, содержащий несколько переменных. К счастью, console.log() может форматировать строку способом sprintf() с использованием спецификаторов, таких как %s, %i и тому подобных.

Например, давайте отформатируем лог, который содержит в себе строку и целое число:

const user = 'john_smith';
const attempts = 5;

console.log('%s failed to login %i times', user, attempts);
// logs "john_smith failed to login 5 times"

%s и %i заменяются значениями user и attempts. Спецификатор %s означает, что нужно преобразовать значение как строку, а %i - как число.

Вот список доступных спецификаторов:

Спецификатор Значение
%s Элемент преобразуется в строку
%d или %i Элемент преобразуется в число
%f Элемент преобразуется в число с плавающей точкой
%o Элемент отображается с оптимальным форматированием
%O Элемент отображается с общим, для объекта JavaScript, форматированием
%c Применяется при использовании CSS

3. Вывод логов с использованием стилей CSS

Консоль браузера позволяет применять стили к выводимому логу.

Вы можете сделать это, используя спецификатор %c с соответствующими стилями CSS. Например, давайте выведем в консоль лог с увеличенным размером и жирностью шрифта:

console.log('%c Big message', 'font-size: 36px; font-weight: bold');

Спецификатор %c применяет стили CSS font-size: 36px; и font-weight: bold.

Вот как выглядит лог с примененными стилями в консоли Chrome:

DevTools

4. Интерактивные логи

Стиль логов зависит от реализации консоли. Браузеры, такие как Chrome и Firefox, предлагают интерактивные логи объектов и массивов, а консоль Node выводит логи в виде текста.

Давайте посмотрим, как Chrome выводит простые объекты, массивы и деревья DOM. Вы можете взаимодействовать с этими элементами, разворачивать и сворачивать их.

4.1 Объекты

const myObject = {
  name: 'John Smith',
  profession: 'agent'
};

console.log(myObject);

В консоли Chrome лог myObject выглядит так:

DevTools

Вы можете развернуть и свернуть список свойств объекта. Также вы можете увидеть прототип объекта (__proto__).

4.2 Массивы

const characters = ['Neo', 'Morpheus', 'John Smith'];

console.log(characters);

Chrome выводит массив символов в консоль следующим образом:

DevTools

4.3 DOM дерево

Вы можете напрямую взаимодействовать с элементом DOM, который отображается в консоли.

console.log(document.getElementById('root'));

В консоли Chrome элемент DOM может быть развернут, а его содержимое может быть изучено полностью:

DevTools

4.4 Интерактивные логи внутри сообщений

Спецификатор %o (который отображает значение с оптимальным форматированием) может вставлять массивы, объекты, элементы DOM и обычный текст в текстовое сообщение без потери интерактивности.

Следующий фрагмент кода выводит в консоль сообщение, содержащее объект:

const myObject = {
  name: 'John Smith',
  profession: 'agent'
};

console.log('Neo, be aware of %o', myObject);

В консоли мы видим, что массив myObject не преобразуется в строку, а остается интерактивным.

DevTools

5. Вывод больших объектов в консоли Node

Логи в Node выводятся в виде простого текста. Однако console.log() в Node не отображает объекты с глубоким уровнем вложенности: объекты на третьем уровне отображаются как [Object].

Например, давайте исследуем следующий объект:

const myObject = {
  propA: {
    propB: {
      propC: {
        propD: 'hello'
      }
    }
  }
};

console.log(myObject);

При запуске скрипта объект propC выводится как [Object]:

console

Чтобы увидеть полную структуру объекта, я выведу его с помощью JSON отображения объекта используя JSON.stringify():

const myObject = {
  propA: {
    propB: {
      propC: {
        propD: 'hello'
      }
    }
  }
};

console.log(JSON.stringify(myObject, null, 2));

JSON.stringify(myObject, null, 2) возвращает JSON-отображение объекта. Третий аргумент 2 устанавливает размер отступа в пробелах.

Теперь объект выведен полностью и красиво отформатирован:

console

Надеюсь, что эти 5 советов сделают ваш опыт работы с консолью в JavaScript более продуктивным.