Stop Using console.log() Everywhere: Better Ways to Debug JavaScript
If you're learning JavaScript, you've probably written something like this hundreds of times:
console.log(data);
console.log(user);
console.log(response);
console.log(error);
There's absolutely nothing wrong with using console.log(). Every developer starts there, and even experienced developers still use it.
However, as your application grows, relying only on console.log() can make debugging slower and your code harder to maintain.
Here are several debugging techniques that can save you time and make your development workflow much more efficient.
1. Use the Browser Debugger
Instead of printing every variable, use the built-in JavaScript debugger.
function calculateTotal(items) {
debugger;
return items.reduce((sum, item) => sum + item.price, 0);
}
When execution reaches the debugger statement, the browser pauses your application. You can inspect variables, check the call stack, and execute code step by step.
This is much more powerful than printing dozens of log statements.
2. Display Objects with console.table()
Large arrays of objects quickly become difficult to read.
Instead of:
console.log(users);
Use:
console.table(users);
The output becomes a clean table that's much easier to understand.
This works especially well for:
- API responses
- Product lists
- User records
- Database results
3. Organize Logs with console.group()
If your application produces many log messages, grouping them makes the console much cleaner.
console.group("Login Process");
console.log("Checking credentials...");
console.log("Loading user...");
console.log("Authentication successful");
console.groupEnd();
Now related messages stay together, making debugging much easier.
4. Measure Performance
Need to know how long a function takes?
console.time("fetchUsers");
await fetchUsers();
console.timeEnd("fetchUsers");
This instantly tells you how long an operation required without installing additional tools.
5. Take Advantage of Breakpoints
Modern browsers include excellent debugging tools.
Simply click beside a line number in Chrome or Firefox DevTools to create a breakpoint.
When execution stops, you can:
- Inspect variables
- View the call stack
- Execute code manually
- Step through your application line by line
For complex bugs, breakpoints are often much faster than adding dozens of log statements.
6. Read Error Messages Carefully
Many developers immediately search Google after seeing an error.
Instead, spend a few seconds reading it.
Most JavaScript errors already tell you:
- Which file caused the problem
- The line number
- The type of error
- The function where it happened
Understanding error messages is a skill that will dramatically improve your debugging speed.
7. Clean Up Before Deploying
We've all forgotten to remove debugging code.
console.log("HERE");
console.log("TEST");
console.log("WHY IS THIS UNDEFINED?");
Before pushing your code to production:
- Remove unnecessary
console.log()calls. - Delete forgotten
debuggerstatements. - Keep only meaningful error logging where appropriate.
A clean codebase is much easier to maintain.
Final Thoughts
console.log() isn't bad—it remains one of the simplest and fastest debugging tools available.
But combining it with browser DevTools, breakpoints, console.table(), and performance timers can significantly improve your workflow.
As your projects become larger and more complex, learning these debugging techniques will save you hours of frustration.
What debugging technique do you use most often? Share your favorite tips in the comments!
Top comments (1)
Nice overview! I’d add one more habit that becomes invaluable in larger applications: structured logging. Instead of scattering console.log() everywhere, use consistent log levels (debug, info, warn, error) and include context like request IDs or user IDs. Good logs don’t just help during development—they make production issues much easier to trace.