🐞Debugging🐞
Начну с консоли:
Есть мнение, дебажить с помощью консоли/console.log - "не круто", т.к. есть дебаггер.
На самом деле, это очень полезный инструмент, решающий многие задачи не хуже дебаггера.
Хорошее понимание консоли в сочетании с дебаггером - ключ к успеху
Вот примеры ситуаций где консоль очень полезна:
🦋 Простая ошибка - все понятно, надо быстро подтвердить
🦋 Ошибка в функции которая вызывается много раз, а ломается только один
🦋 Race conditions
🦋 Много рекурсий
🦋 Нужно одновременно следить за большим количеством частей кода
Посмотрим что умеет консоль. На странице в браузере нажимаем F12.
Про Console.log много писать не буду
Есть интересный прием: если вам важно знать, что именно выведено в консоль, вместо добавления второго аргумента, заверните первый в скобки:
console.log({a});
![notion image](https://www.notion.so/image/https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FEF38imoX0AA1ZlR.png?table=block&id=49566baf-4426-4b30-8203-40a6348fa04b&cache=v2)
При дебаге массивов с большим количеством объектов:
сonsole.log(list) показывает массив в свернутом виде.
console.log(…list) отобразит все элементы, но при большом количестве будет очень тормозить.
Чаще всего лучший вариант - console.table()
![notion image](https://www.notion.so/image/https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FEF4ASdcWwAEYl5T.jpg?table=block&id=936038ca-4b5b-46e4-94b9-72c40fbc9d8f&cache=v2)
Еще console.log не умеет показывать, какие свойства есть у функции. зато есть console.dir
function Camille(){ // code }
Camille.name = ‘Saint-Saëns’;
console.log(Camille); // ƒ Camille(){ // code }
console.dir(Camille); //
![notion image](https://www.notion.so/image/https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FEF4AzlsWkAApz_d.jpg?table=block&id=872982e6-c02a-4067-b477-a62b87c515d0&cache=v2)
В некоторых проектах консоль - как мусорка
В консоли гибкая система фильтров:
⛔️ Hide Network - прячет сетевые ошибки
⛔️ Selected context only - прячет ошибки из расширений и других фреймов
⛔️ Нажав правой кнопкой на лог можно спрятать все логи файла (Hide message from...)
![notion image](https://www.notion.so/image/https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FEF4DonmXoAEjMuk.jpg?table=block&id=4a15bbd1-55d2-4c0e-9c07-bc8a66db32a0&cache=v2)
Чтобы отследить откуда именно была вызвана функция с определенными параметрами, можно использовать console.trace().
Из-за размеров стека современных приложений полезно совместить с console.groupCollapsed()
console.groupCollapsed();
console.trace('lol');
console.groupEnd();
![notion image](https://www.notion.so/image/https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FEF4G_J2WwAAAlaI.jpg?table=block&id=dc811a3b-a5d7-455c-b622-10d37ab9cfce&cache=v2)
В случае когда функция запускается много-много раз, а ломается только один, можно использовать:
console.assert(a, b);
Фактически это более короткий аналог
if(a){
console.error(b)
}
![notion image](https://www.notion.so/image/https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FEF4HsNsXYAED6wr.png?table=block&id=644a80b1-59f4-487a-9631-e31e919ba239&cache=v2)
console.log поддерживает оформление вывода с помощью CSS:
console.log(‘%c Hi’, ‘color: red’); // Выведет Hi красным цветом
voidcanvas.com/make-console-l…
Интересно, как они ограничили доступные стили, интересные темы вроде position: fixed не работают.

![notion image](https://www.notion.so/image/https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FEF4IRN3WwAABEmj.jpg?table=block&id=55f066ca-be41-45df-8a1e-296235e89b3e&cache=v2)
Про консоль хватит, хотя там есть еще очень много крутого.
Домашнее задание: console.log(console) и посмотреть что еще там есть :)
Или developers.google.com/web/tools/chro…
Присылайте так же свои способы дебага (но только то, что можно вывести написав в коде, всякие $0 и $$ будут отдельно)