Кратко
Скопированоconsole — это объект, предоставляющий доступ к методам отладки и логирования.
Методы можно разделить на несколько категорий:
- логирование;
- функции подсчёта;
- функции группировки;
- таймеры.
Реализация и поведение методов консоли зависит от среды выполнения.
Объект console доступен в коде как свойство глобального объекта: в браузере - window, в Node.js - global.
Когда JavaScript-код выполняется в браузере, взаимодействие с консолью осуществляется с помощью инструментов разработчика.
Консоль имеет несколько уровней логирования (log levels). Количество и именование уровней логирования зависит от реализации.
К основным уровням относятся:
- ошибка (error);
- предупреждение (warning);
- информация (info);
- отладка (debug или verbose).
Такое разделение позволяет визуально выделять сообщения в зависимости от их важности.
Методы логирования
СкопированоК методам логирования относятся: assert, clear, debug, dir, dirxml, error, info, log, table, trace, warn.
console.assert(assertion, message [, param1, ..., paramN])
Выводит сообщение об ошибке если утверждение (assertion) ложно.
Сообщение будет отображено только в случае если результат выражения, переданного в качестве первого аргумента — false. Остальные аргументы будут использованы для формирования сообщения консоли.
function checkNumber(num) { const value = Number(num) console.assert(!Number.isNaN(value), 'это не число. Аргумент:', num) return value}checkNumber('a')// Assertion failed: это не число. Аргумент: a
function checkNumber(num) {
const value = Number(num)
console.assert(!Number.isNaN(value), 'это не число. Аргумент:', num)
return value
}
checkNumber('a')
// Assertion failed: это не число. Аргумент: a
С помощью метода console можно предупреждать о неожиданных результатах вычислений и упрощать поиск ошибок.
console.clear()
Очищает консоль от ранее выведенных сообщений.
console.debug('На старт!')console.info('Внимание!')console.clear()
console.debug('На старт!')
console.info('Внимание!')
console.clear()
В браузерах очистка консоли может быть также выполнена с помощью инструментов разработчика.
console.debug([param1, ..., paramN])
Выводит сообщение с уровнем логирования 'отладка' (debug или verbose).
function calc(...args) { console.debug('Аргументы:', args) return Math.max(...args)}calc(4, 8, 12, 2)// Аргументы: [ 4, 8, 12, 2 ]
function calc(...args) {
console.debug('Аргументы:', args)
return Math.max(...args)
}
calc(4, 8, 12, 2)
// Аргументы: [ 4, 8, 12, 2 ]
Метод console обычно используют для выделения отладочной информации в общем потоке сообщений консоли. B браузерах сообщения отладки могут быть скрыты с помощью инструментов разработчика.
console.dir(obj)
Отображает объект в виде списка свойств. В отличии от других методов логирования, console не поддерживает никакие дополнительные текстовые сообщения.
const obj = {a: { b: [1, 2, 3], c: {d: true}}, e: 'E'}console.dir(obj)// { a: { b: [ 1, 2, 3 ], c: { d: true } }, e: 'E' }
const obj = {a: { b: [1, 2, 3], c: {d: true}}, e: 'E'}
console.dir(obj)
// { a: { b: [ 1, 2, 3 ], c: { d: true } }, e: 'E' }
В браузерах этот метод позволяет отображать DOM-элементы в виде интерактивного дерева.
Node.js или Deno поддерживают дополнительные параметры, позволяющие изменять отображение свойств объекта:
- depth — количество уровней вложенности свойств;
- showHidden — флаг, отвечающий за отображение невидимых при перечислениях (non-enumerable) свойств и свойств с типом
Symbol.
Пример выполнения в Node.js
const obj = {a: { b: [1, 2, 3], c: {d: true}}, e: 'E'}console.dir(obj, {depth: 0})// { a: [Object], e: 'E' }
const obj = {a: { b: [1, 2, 3], c: {d: true}}, e: 'E'}
console.dir(obj, {depth: 0})
// { a: [Object], e: 'E' }
console.dirxml(element)
Отображает элемент XML/HTML в виде интерактивного дерева или JavaScript-объект в виде списка свойств.
При использовании в среде Node.js, результат работы метода не отличим от использования console
console.error([param1, ..., paramN])
Выводит сообщение с уровнем логирования 'ошибка' (error).
В браузерах сообщения об ошибках дополнительно отображают информацию о стеке вызовов (перечень вызванных функций)
try { const value = 'тест'.sort()} catch (error) { console.error('Ошибка:', error)}// Ошибка: TypeError: "тест".sort is not a function
try {
const value = 'тест'.sort()
} catch (error) {
console.error('Ошибка:', error)
}
// Ошибка: TypeError: "тест".sort is not a function
Как и большинство методов логирования console может принимать множество аргументов для формирования сообщения:
function getDelta(a, b) { if ( a < b ) { console.error('Внимание! Аварийная ситуация:', 'a =', a, ', b =', b ) return 0 } return a - b}getDelta(2, 4)// Внимание! Аварийная ситуация: a = 2 , b = 4
function getDelta(a, b) {
if ( a < b ) {
console.error('Внимание! Аварийная ситуация:', 'a =', a, ', b =', b )
return 0
}
return a - b
}
getDelta(2, 4)
// Внимание! Аварийная ситуация: a = 2 , b = 4
Метод console применяется для выделения информации об ошибках в общем потоке сообщений консоли.
console.info([param1, ..., paramN])
Выводит сообщение с уровнем логирования 'информация' (info).
Покажем на примере метода console как быстро отобразить значение нескольких переменных, так чтобы не путаться в значениях и не тратить время на формирование сообщения. Для этого достаточно объединить их в объект:
let isAuthorized = truelet hasMessages = truelet isAdmin = falseconsole.info({ isAuthorized, hasMessages, isAdmin })// { isAuthorized: true, hasMessages: true, isAdmin: false }
let isAuthorized = true
let hasMessages = true
let isAdmin = false
console.info({ isAuthorized, hasMessages, isAdmin })
// { isAuthorized: true, hasMessages: true, isAdmin: false }
Firefox и Safari выделяют сообщения console c помощью значка (i
console.log([param1, ..., paramN])
console наиболее известный и часто используемый метод консоли.
Подробнее о console можно почитать в одноимённой статье.
В Chrome поведение методов console и console идентично.
console.table(data, [columns])
Выводит информацию об объекте или массиве в табличном виде. Для объекта строками таблицы будут имена свойств, а для массива его элементы.
const project = { name: 'jQuery', stars: 59275, version: '3.7.1', date: '28.08.2023'}// ┌──────────┬───────────────┐// │ (index) │ Values │// ├──────────┼───────────────┤// │ name │ 'jQuery' │// │ stars │ 59275 │// │ version │ '3.7.1' │// │ date │ '28.08.2023' │// └──────────┴───────────────┘console.table(project)
const project = {
name: 'jQuery',
stars: 59275,
version: '3.7.1',
date: '28.08.2023'
}
// ┌──────────┬───────────────┐
// │ (index) │ Values │
// ├──────────┼───────────────┤
// │ name │ 'jQuery' │
// │ stars │ 59275 │
// │ version │ '3.7.1' │
// │ date │ '28.08.2023' │
// └──────────┴───────────────┘
console.table(project)
Опциональный параметр columns используется для указания какие свойства должны отображаться в столбцах:
const jQuery = { name: 'jQuery', stars: 59275, version: '3.7.1', date: '28.08.2023'}const react = { name: 'React', stars: 230732, version: '19.0.0', date: '5.12.2024'}console.table([jQuery, react], ['name', 'version'])// ┌──────────┬───────────┬───────────┐// │ (index) │ name │ version │// ├──────────┼───────────┼───────────┤// │ 0 │ 'jQuery' │ '3.7.1' │// │ 1 │ 'React' │ '19.0.0' │// └──────────┴───────────┴───────────┘
const jQuery = {
name: 'jQuery',
stars: 59275,
version: '3.7.1',
date: '28.08.2023'
}
const react = {
name: 'React',
stars: 230732,
version: '19.0.0',
date: '5.12.2024'
}
console.table([jQuery, react], ['name', 'version'])
// ┌──────────┬───────────┬───────────┐
// │ (index) │ name │ version │
// ├──────────┼───────────┼───────────┤
// │ 0 │ 'jQuery' │ '3.7.1' │
// │ 1 │ 'React' │ '19.0.0' │
// └──────────┴───────────┴───────────┘
console.trace([param1, ..., paramN])
Выводит сведения о стэке вызовов для текущей функции. Информация о каждой функции будет включать имя функции и номер строки. Стэк вызовов может пригодится для понимания порядка выполнения программы.
function func() { console.trace()}function foo() { func()}function bar() { foo()}foo()// console.trace() стэк:// func :2// foo :6// <anonymous> :13bar()// console.trace() стэк:// func :2// foo :6// bar :10// <anonymous> :15
function func() {
console.trace()
}
function foo() {
func()
}
function bar() {
foo()
}
foo()
// console.trace() стэк:
// func :2
// foo :6
// <anonymous> :13
bar()
// console.trace() стэк:
// func :2
// foo :6
// bar :10
// <anonymous> :15
☝️ При использовании в среде Node.js, результат работы метода будет включать информацию о вызываемых внутренних модулях.`
console.warn([param1, ..., paramN])
Выводит сообщение с уровнем логирования 'предупреждение' (warning).
function checkNumber(number) { const valid = Number.isInteger(number) && number >= 0 && number < 128 if ( !valid ) { console.warn('Ожидается: 0 <= число <= 127, получено:', number) } return valid}checkNumber(-5)// Ожидается: 0 <= число <= 127, получено: -5
function checkNumber(number) {
const valid = Number.isInteger(number) && number >= 0 && number < 128
if ( !valid ) {
console.warn('Ожидается: 0 <= число <= 127, получено:', number)
}
return valid
}
checkNumber(-5)
// Ожидается: 0 <= число <= 127, получено: -5
Метод console обычно применяется для показа предупреждений и сообщений о некритичных ошибках.
Методы подсчёта
СкопированоК методам подсчёта относятся: count и count
console.count([label])
Подсчитывает и выводит информацию о количестве раз, когда метод был вызван. Метод console пригодится при отладке, например когда необходимо подсчитать сколько раз выполняется функция:
function fibonacci(num) { console.count() if (num <= 1) return 1 return fibonacci(num - 1) + fibonacci(num - 2)}fibonacci(3)// default: 1// default: 2// default: 3// default: 4// default: 5
function fibonacci(num) {
console.count()
if (num <= 1) return 1
return fibonacci(num - 1) + fibonacci(num - 2)
}
fibonacci(3)
// default: 1
// default: 2
// default: 3
// default: 4
// default: 5
Используя аргумент label можно подсчитать сколько раз метод был вызван с определённым параметром:
function getReadyStatus(connectId = '?') { const status = `${connectId}: установлен` console.count(connectId) return status}getReadyStatus('основной')getReadyStatus('резервный')getReadyStatus('основной')// основной: 1// резервный: 1// основной: 2
function getReadyStatus(connectId = '?') {
const status = `${connectId}: установлен`
console.count(connectId)
return status
}
getReadyStatus('основной')
getReadyStatus('резервный')
getReadyStatus('основной')
// основной: 1
// резервный: 1
// основной: 2
console.countReset([label])
Вспомогательный метод подсчёта, выполняющий сброс счётчика. Если значение параметра label не указано будет очищен default счётчик:
function getReadyStatus(connectId = '?') { const status = `${connectId}: установлен` console.count(connectId) return status}getReadyStatus('основной')getReadyStatus('резервный')console.countReset('основной')getReadyStatus('основной')// основной: 1// резервный: 1// основной: 0// основной: 1
function getReadyStatus(connectId = '?') {
const status = `${connectId}: установлен`
console.count(connectId)
return status
}
getReadyStatus('основной')
getReadyStatus('резервный')
console.countReset('основной')
getReadyStatus('основной')
// основной: 1
// резервный: 1
// основной: 0
// основной: 1
☝️ При использовании в среде Node.js, при выполнении метода count в консоли не будет отображаться подтверждающее сообщение.
Методы группировки
СкопированоМетоды группировки позволяют выводить сообщения в виде иерархической структуры. Каждая группа сообщений имеет горизонтальный сдвиг относительно предыдущей группы. Такое представление информации помогает визуально определить источник сообщений. В консоли браузера можно также сворачивать и раскрывать группы сообщений.
console.group([label])
Создаёт новую группу (уровень) для сообщений. При создании группы можно указать заголовок label, который служит для описания группы:
function showItems(name, items) { console.group(name) items.forEach(item => console.info(item))}console.log('100 вопросов по JS')console.group()console.log('Вопрос 1')showItems( 'Найди ключевые слова JS:', ['null', 'delete', 'instanceOf', 'this', 'debug', 'super', 'wait'])// 100 вопросов по JS// Вопрос 1// Найди ключевые слова JS:// null// delete// instanceOf// this// debug// super// wait
function showItems(name, items) {
console.group(name)
items.forEach(item => console.info(item))
}
console.log('100 вопросов по JS')
console.group()
console.log('Вопрос 1')
showItems(
'Найди ключевые слова JS:',
['null', 'delete', 'instanceOf', 'this', 'debug', 'super', 'wait']
)
// 100 вопросов по JS
// Вопрос 1
// Найди ключевые слова JS:
// null
// delete
// instanceOf
// this
// debug
// super
// wait
console.groupEnd()
Прекращает группировку сообщений текущей группы (уровеня). Последующие сообщения будут отображаться с отступом предыдущей группы:
console.group('Массивы')console.group('.find()')console.log('Метод массива find() вернёт первый найденный в массиве элемент.')console.groupEnd()console.group('.findLast()')console.log('Метод findLast() обходит массив, начиная от последнего элемента.')console.groupEnd()console.groupEnd()console.group('Функции')// Массивы// .find()// Метод массива find() вернёт первый найденный в массиве элемент.// .findLast()// Метод findLast() обходит массив, начиная от последнего элемента.//Функции
console.group('Массивы')
console.group('.find()')
console.log('Метод массива find() вернёт первый найденный в массиве элемент.')
console.groupEnd()
console.group('.findLast()')
console.log('Метод findLast() обходит массив, начиная от последнего элемента.')
console.groupEnd()
console.groupEnd()
console.group('Функции')
// Массивы
// .find()
// Метод массива find() вернёт первый найденный в массиве элемент.
// .findLast()
// Метод findLast() обходит массив, начиная от последнего элемента.
//Функции
console.groupCollapsed([label])
Создаёт новую группу (уровень) для сообщений. В отличии от метода group при использовании консоли браузера, группа отображается свёрнутой.
console.groupCollapsed('Массивы')console.groupCollapsed('.find()')console.log('Метод массива find() вернёт первый найденный в массиве элемент.')console.groupEnd()console.groupCollapsed('.findLast()')console.log('Метод findLast() обходит массив, начиная от последнего элемента.')console.groupEnd()console.groupEnd()console.groupCollapsed('Функции')
console.groupCollapsed('Массивы')
console.groupCollapsed('.find()')
console.log('Метод массива find() вернёт первый найденный в массиве элемент.')
console.groupEnd()
console.groupCollapsed('.findLast()')
console.log('Метод findLast() обходит массив, начиная от последнего элемента.')
console.groupEnd()
console.groupEnd()
console.groupCollapsed('Функции')

Методы таймеров
СкопированоМетоды таймеров применяются для подсчёта и отображения времени затраченного на выполнение операций. Каждый таймер имеет уникальное имя. Одновременно может использоваться множество (до 10000) таймеров.
console.time([label])
Создаёт новый таймер. При этом консоль не отображает никаких сообщений. Если не указать имя label, будет использован таймер по умолчанию:
console.time('time')console.time()
console.time('time')
console.time()
При попытке создать таймер с тем же именем, консоль отобразит предупреждение:
console.time('time')const a = 2console.time('time')// Timer “time” already exists.
console.time('time')
const a = 2
console.time('time')
// Timer “time” already exists.
console.timeEnd([label])
Останавливает ранее созданный таймер и отображает имя таймера и количество миллисекунд прошедших от момента создания таймера:
function makeLoop(size) { let number = 0 for (let i = 0; i < size; i++) { for(let j = 0; j < size; j++) { number++ } }}console.time('function time')makeLoop(1000)console.timeEnd('function time')// function time: 2.571msconsole.time()makeLoop(10000)console.timeEnd()// default: 89.854ms
function makeLoop(size) {
let number = 0
for (let i = 0; i < size; i++) {
for(let j = 0; j < size; j++) {
number++
}
}
}
console.time('function time')
makeLoop(1000)
console.timeEnd('function time')
// function time: 2.571ms
console.time()
makeLoop(10000)
console.timeEnd()
// default: 89.854ms
console.timeLog([label])
Отображает имя таймера и текущее количество миллисекунд прошедших от момента создания таймера. Таймер при этом не останавливается:
function makeLoop(size) { let number = 0 for (let i = 0; i < 5; i++) { for(let j = 0; j < size; j++) { number++ } console.timeLog('loop') }}console.time('function time')console.time('loop')makeLoop(1000)console.timeLog('function time')// loop: 0.059ms// loop: 6.786ms// loop: 7.105ms// loop: 7.289ms// loop: 7.511ms// function time: 7.707ms
function makeLoop(size) {
let number = 0
for (let i = 0; i < 5; i++) {
for(let j = 0; j < size; j++) {
number++
}
console.timeLog('loop')
}
}
console.time('function time')
console.time('loop')
makeLoop(1000)
console.timeLog('function time')
// loop: 0.059ms
// loop: 6.786ms
// loop: 7.105ms
// loop: 7.289ms
// loop: 7.511ms
// function time: 7.707ms
Использование спецификаторов форматирования
СкопированоБольшинство методов логирования поддерживают дополнительный способ форматирования сообщений — спецификаторы форматирования (string substitutions). С их помощью можно указать необходимый тип отображаемых данных.
const temperature = 15700000const destination = 1496const name = 'Солнце'console.log('Звезда по имени %s с температурой ядра %d K, находится на расстоянии около %f млн км от Земли', name, temperature, destination)// Звезда по имени Солнце с температурой ядра 15700000 K, находится на расстоянии 149.6 млн км от Земли
const temperature = 15700000
const destination = 1496
const name = 'Солнце'
console.log('Звезда по имени %s с температурой ядра %d K, находится на расстоянии около %f млн км от Земли', name, temperature, destination)
// Звезда по имени Солнце с температурой ядра 15700000 K, находится на расстоянии 149.6 млн км от Земли
Такой способ формирования сообщений консоли особенно удобен в случае, когда в одной строке необходимо объединить вывод нескольких переменных и текста.
Для отображения объектов используются спецификаторы %o и %. В среде Node они работают идентично. В консоли браузера Chrome: % — отображает свойства объекта как при использовании console
const project0 = { name: 'hello-world', year: 2014, stars: 0}console.info('Информация о проекте %o', project0)console.info('Информация о проекте %O', project0)
const project0 = {
name: 'hello-world',
year: 2014,
stars: 0
}
console.info('Информация о проекте %o', project0)
console.info('Информация о проекте %O', project0)
