We all know the basics of debugging values, that console.log(someVar)
will print the current value of someVar
. It is the core of “CDD” [Console Driven Development <rimshot>🤣]. I thought I’d share some other functions from the console
that I use when debugging. Please know that this is by no means a complete list of all the options available on the console
object, you can check MDN for that.
console
things you gotta know:
console.clear()
-
Actually a do not use - If you are reading this and use console.clear()
in your code, or even if you just use clear()
by itself - you should know that the keyboard-shortcut to clear the console is CNTRL + L. This is actually a pretty universal clear-screen command and also works in your computer’s terminal. Learn it. Live it. Love it.
console.table(obj)
- Turns object values into a literal table on the screen
- Primarily this is for Object{}s, but you could use it for other things I guess 🤷.
- Even though I can’t give a good example of the output (and it is a bit different between browsers),
.table()
is so important that I’m putting it all the way up here.
Other Useful Console commands I use
console.assert()
- Quick conditional test for failures - if the test result is
true
/passes, nothing happens. console.assert()
takes two arguments:- 1st: A condition to test
- 2nd. Something to return if test fails (usually text, but doesn’t need to be)]
)
const a = 123;
const notA = 456;
console.assert(a == notA, `Uh oh! The value ${a} is not the same as ${notA}`);
// ⮕ Assertion failed: Uh oh! The value 123 is not the same as 456
console.count()
- Logs how many times the
count()
has been called in your code and is useful for monitoring code execution - ALL counters are global - they do not care about scope or arrow-function/this-bindings!
console.count();
by itself triggers a default global counterconsole.countReset();
resets a counter back to zero
- You can get unique counts by using labels as an argument:
console.count('Some Name')
- The exact same counter can be called/shared by different functions
(A caveat about counters: If you are manually checking a counter value, they are unfortunately a bit like the Heisenberg Principal. Let’s say you have paused your code with a
debugger()
statement and want to check the current value of a counter… To check the value you have to call the.count()
functon, but, since.count()
incremements *every* time it is called - you end up increasing the count by 1 which can throw things off) Ex:
- The exact same counter can be called/shared by different functions
(A caveat about counters: If you are manually checking a counter value, they are unfortunately a bit like the Heisenberg Principal. Let’s say you have paused your code with a
function basic() {
console.count();
}
const arrowFunction = () => {
const nestedFunction = () => {
console.count();
};
console.count();
nestedFunction();
};
function x() {
console.count('shared count');
}
function y() {
console.count('shared count');
}
function z() {
console.count('unique counter');
}
/**~~~~~~~~~~~~~~~~~~~~ Results ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**/
basic(); // ⮕ "default: 1"
console.count(); // ⮕ "default: 2"
arrowFunction(); // ⮕ "default: 3", followed by "default: 4"
x(); // ⮕ "shared count: 1"
y(); // ⮕ "shared count: 2"
z(); // ⮕ "unique counter: 1"
Some final minor tricks for the console
:
Simple color formatting
console.warn()
- works exactly like.log()
, but prints in a pretty yellow color instead.console.error()
- works exactly like.log()
, but prints in a pretty red color instead.
Destructuring in log()
This is trivial, but hey…
If you want to log a value - instead of writing this:
const a = 1;
const b = 2;
console.log('a:', a, 'b:', b); // ⮕ "a: 1 b: 2"
You can get pretty much the same thing by putting those variables inside the .log()
as an object{} and it will automagically deconstruct the values:
console.log({ a, b }); // ⮕ `{a: 1 b: 2}` - Not the exact same but
Like I wrote at the top, these are just some things I commonly use when debugging. There are ways to group log messages together, reformat text size\colors, track operation timing, and more but you should take a look at MDN for all of those…
(Man, I really gotta start using console.trace()
for checking call-stack execution order.)
❯ ★ ✎ ✦ ✮ ✯ ❂ ⦿ ❯ ★ ✎ ✦ ✮ ✯ ❂ ⦿ ❯ ★ ✎ ✦ ✮ ✯ ❂ ⦿ ❯ ★ ✎ ✦