Как получить максимальную отдачу от консоли JavaScript

Один из самых основных инструментов отладки в JavaScript - это console.log(). consoleПоставляется с несколькими другими полезными методами , которые могут добавить к отладки инструментария разработчика.

Вы можете использовать consoleдля выполнения некоторых из следующих задач:

  • Выведите таймер, чтобы упростить сравнительный анализ
  • Вывести таблицу для отображения массива или объекта в удобном для чтения формате
  • Примените цвет и другие параметры стиля к выходным данным с помощью CSS

Консольный объект

consoleОбъект дает вам доступ к консоли браузера. Он позволяет выводить строки, массивы и объекты, которые помогают отлаживать ваш код. consoleЯвляется частью windowобъекта, и поставляется в объектной модели браузера (BOM).

Мы можем получить доступ к consoleодному из двух способов:

  1. window.console.log('This works')
  2. console.log('So does this')

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

Одно небольшое примечание о спецификации: у нее нет установленного стандарта, поэтому каждый браузер реализует ее немного по-разному. Я тестировал все свои примеры как в Chrome, так и в Firefox, но ваш результат может отображаться по-разному в зависимости от вашего браузера.

Вывод текста

Самый распространенный элемент consoleобъекта - это console.log. В большинстве сценариев вы будете использовать его для выполнения работы.

Есть четыре различных способа вывода сообщения на консоль:

  1. log
  2. info
  3. warn
  4. error

Все четыре работают одинаково. Все, что вам нужно сделать, это передать один или несколько аргументов выбранному методу. Затем он отображает другой значок, чтобы указать уровень ведения журнала. В приведенных ниже примерах вы можете увидеть разницу между журналом уровня информации и журналом уровня предупреждений / ошибок.

Возможно, вы заметили сообщение журнала ошибок - оно более эффектное, чем другие. Он отображает как красный фон, так и трассировку стека, где infoи warn нет. Хотя warnв Chrome есть желтый фон.

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

Подстановки строк

Этот метод использует заполнитель в строке, который заменяется другим аргументом (ами), который вы передаете методу. Например:

Вход :console.log('string %s', 'substitutions')

Выход :string substitutions

Это %sзаполнитель для второго аргумента, 'substitutions'который следует после запятой. Любые строки, целые числа или массивы будут преобразованы в строку и заменят %s. Если вы передадите объект, он отобразится [object Object].

Если вы хотите передать объект, вам нужно использовать %oили %Oвместо %s.

console.log('this is an object %o', { obj: { obj2: 'hello' }})

Числа

Подстановку строк можно использовать с целыми числами и значениями с плавающей запятой, используя:

  • %iили %dдля целых чисел
  • %f для чисел с плавающей запятой.

Вход :console.log('int: %d, floating-point: %f', 1, 1.5)

Выход :int: 1, floating-point: 1.500000

Числа с плавающей запятой можно отформатировать для отображения только одной цифры после десятичной точки с помощью %.1f. Вы можете сделать, %.nfчтобы отобразить n цифр после десятичной дроби.

Если бы мы отформатировали приведенный выше пример для отображения одной цифры после десятичной точки для числа с плавающей запятой, это выглядело бы следующим образом:

Вход :console.log('int: %d, floating-point: %.1f', 1, 1.5)

Выход :int: 1, floating-point: 1.5

Спецификаторы форматирования

  1. %s| заменяет элемент строкой
  2. %(d|i)| заменяет элемент на целое число
  3. %f | заменяет элемент поплавком
  4. %(o|O)| элемент отображается как объект.
  5. %c| Применяет предоставленный CSS

Шаблоны строк

С появлением ES6 шаблонные литералы стали альтернативой заменам или конкатенации. Они используют обратные кавычки (``) вместо кавычек, а переменные идут внутрь ${}:

const a = 'substitutions';
console.log(`bear: ${a}`);
// bear: substitutions

Объекты отображаются так же, как [object Object]в шаблонных литералах, поэтому вам нужно будет использовать замену с помощью %oили, %Oчтобы просмотреть детали, или зарегистрировать его отдельно.

Using substitutions or templates creates code that’s easier to read compared to using string concatenation: console.log('hello' + str + '!');.

Pretty color interlude!

Now it is time for something a bit more fun and colorful!

It is time to make our console pop with different colors with string substitutions.

I will be using a mocked Ajax example that give us both a success (in green) and failure (in red) to display. Here’s the output and code:

const success = [ 'background: green', 'color: white', 'display: block', 'text-align: center'].join(';');
const failure = [ 'background: red', 'color: white', 'display: block', 'text-align: center'].join(';');
console.info('%c /dancing/bears was Successful!', success);console.log({data: { name: 'Bob', age: 'unknown'}}); // "mocked" data response
console.error('%c /dancing/bats failed!', failure);console.log('/dancing/bats Does not exist');

You apply CSS rules in the string substitution with the %c placeholder.

console.error('%c /dancing/bats failed!', failure);

Then place your CSS elements as a string argument and you can have CSS-styled logs. You can add more than one %c into the string as well.

console.log('%cred %cblue %cwhite','color:red;','color:blue;', 'color: white;')

This will output the words ‘red’, ‘blue’ and ‘white’ in their respected colors.

There are quite a few CSS properties supported by the console. I would recommend experimenting to see what works and what doesn’t. Again, your results may vary depending on your browser.

Other available methods

Here are a few other available console methods. Note that some items below have not had their APIs standardized, so there may be incompatibilities between the browsers. The examples were created with Firefox 51.0.1.

Assert()

Assert takes two arguments — if the first argument evaluates to a falsy value, then it displays the second argument.

let isTrue = false;
console.assert(isTrue, 'This will display');
isTrue = true;
console.assert(isTrue, 'This will not');

If the assertion is false, it outputs to the console. It’s displayed as an error-level log as mentioned above, giving you both a red error message and a stack trace.

Dir()

The dir method displays an interactive list of the object passed to it.

console.dir(document.body);

Ultimately, dir only saves one or two clicks. If you need to inspect an object from an API response, then displaying it in this structured way can save you some time.

Table()

The table method displays an array or object as a table.

console.table(['Javascript', 'PHP', 'Perl', 'C++']);

The array’s indices or object property names come under the left-hand index column. Then the values are displayed in the right-hand column.

const superhero = { firstname: 'Peter', lastname: 'Parker',}console.table(superhero);

Note for Chrome users: This was brought to my attention by a co-worker but the above examples of the table method don’t seem to work in Chrome. You can work around this issue by placing any items into an array of arrays or an array of objects:

console.table([['Javascript', 'PHP', 'Perl', 'C++']]);
const superhero = { firstname: 'Peter', lastname: 'Parker',}console.table([superhero]); 

Group()

console.group() is made up of at least a minimum of three console calls, and is probably the method that requires the most typing to use. But it’s also one of the most useful (especially for developers using Redux Logger).

A somewhat basic call looks like this:

console.group();console.log('I will output');console.group();console.log('more indents')console.groupEnd();console.log('ohh look a bear');console.groupEnd();

This will output multiple levels and will display differently depending on your browser.

Firefox shows an indented list:

Chrome shows them in the style of an object:

Each call to console.group() will start a new group, or create a new level if it’s called inside a group. Each time you call console.groupEnd() it will end the current group or level and move back up one level.

I find the Chrome output style is easier to read since it looks more like a collapsible object.

You can pass group a header argument that will be displayed over console.group:

console.group('Header');

You can display the group as collapsed from the outset if you call console.groupCollapsed(). Based on my experience, this seems to work only in Chrome.

Time()

The time method, like the group method above, comes in two parts.

A method to start the timer and a method to end it.

Once the timer has finished, it will output the total runtime in milliseconds.

To start the timer, you use console.time('id for timer') and to end the timer you use console.timeEnd('id for timer') . You can have up to 10,000 timers running simultaneously.

The output will look a bit like this timer: 0.57ms

It is very useful when you need to do a quick bit of benchmarking.

Conclusion

There we have it, a bit of a deeper look into the console object and some of the other methods that come with it. These methods are great tools to have available when you need to debug code.

There are a couple of methods that I have not talked about as their API is still changing. You can read more about them or the console in general on the MDN Web API page and its living spec page.