How to Execute JavaScript in Chrome DevTools

Master Chrome DevTools for running JavaScript code, debugging scripts, inspecting variables, and profiling performance. This hands-on guide covers the Console, Sources panel, breakpoints, and live editing.

JavaScriptbeginner
12 min read

Chrome DevTools is the most powerful free tool available to JavaScript developers. It is built directly into Google Chrome and gives you the ability to run code on the fly, set breakpoints, inspect variables at runtime, measure performance, and edit JavaScript live without reloading the page. Every professional web developer uses DevTools daily, and learning it early will save you hundreds of hours of debugging time.

Think of DevTools as an X-ray machine for websites. While a regular user sees only the finished page, DevTools lets you see the skeleton (DOM), the wiring (JavaScript), the plumbing (network requests), and the paint job (CSS) all at once. This guide focuses on the JavaScript side: how to run code, debug it, and profile it.

Opening Chrome DevTools

There are several ways to open DevTools. Pick the one that feels fastest to you.

MethodShortcutWhat Opens
Keyboard shortcutF12Last active panel
Keyboard shortcutCtrl+Shift+J (Windows) / Cmd+Option+J (Mac)Console panel directly
Keyboard shortcutCtrl+Shift+I (Windows) / Cmd+Option+I (Mac)Elements panel
Right-click menuRight-click any element > "Inspect"Elements panel, focused on that element
Chrome menu⋮ > More Tools > Developer ToolsLast active panel
Dock Position Tip

You can dock DevTools to the bottom, right side, left side, or in a separate window. Click the three-dot menu inside DevTools and select your preferred dock position. Most developers prefer bottom or right docking.

The Console Panel: Your JavaScript Playground

The Console panel is the primary place to execute JavaScript interactively. It behaves like a REPL (Read-Eval-Print Loop): you type an expression, press Enter, and the result appears immediately.

Basic Code Execution

javascriptjavascript
// Type these one at a time in the Console and press Enter after each:
 
// Simple expressions
5 + 3
// Output: 8
 
"hello".toUpperCase()
// Output: "HELLO"
 
// Variable declarations persist during the session
const prices = [29.99, 49.99, 9.99, 74.99];
const total = prices.reduce((sum, price) => sum + price, 0);
console.log(`Total: $${total.toFixed(2)}`);
// Output: Total: $164.96
 
// You can access any variable declared in the page's JavaScript
// For example, on a React page you might find window.__NEXT_DATA__

Multi-Line Code in the Console

To write multi-line code, press Shift+Enter to create a new line without executing. Press Enter on the last line to run everything.

javascriptjavascript
// Press Shift+Enter after each line, then Enter on the last line:
function formatCurrency(amount, currency = "USD") {
  return new Intl.NumberFormat("en-US", {
    style: "currency",
    currency: currency
  }).format(amount);
}
 
formatCurrency(1299.5);
// Output: "$1,299.50"
 
formatCurrency(1299.5, "EUR");
// Output: "€1,299.50"

Interacting with the Current Page

The Console has direct access to the page's DOM. You can query elements, change their content, and even add entirely new elements.

javascriptjavascript
// Select elements using CSS selectors
const heading = document.querySelector("h1");
console.log(heading.textContent);
 
// Change the page live
heading.textContent = "I changed this heading from DevTools!";
heading.style.color = "#FF4500";
heading.style.fontSize = "48px";
 
// Add a new element
const banner = document.createElement("div");
banner.textContent = "This banner was injected via DevTools";
banner.style.cssText = "background: #222; color: #fff; padding: 16px; text-align: center;";
document.body.prepend(banner);

Useful Console Methods Beyond console.log

The console object has many methods beyond log. Here are the ones you will use most.

MethodPurposeExample
console.log()General outputconsole.log("Debug info:", data)
console.error()Error messages (red styling)console.error("Failed to load user")
console.warn()Warning messages (yellow styling)console.warn("Deprecated API used")
console.table()Display arrays/objects as a tableconsole.table(users)
console.time() / console.timeEnd()Measure execution timeSee example below
console.group() / console.groupEnd()Group related logsSee example below
console.dir()Inspect object properties treeconsole.dir(document.body)
console.clear()Clear the consoleconsole.clear()
javascriptjavascript
// console.table() displays data in a readable table format
const inventory = [
  { product: "Laptop", price: 999, stock: 23 },
  { product: "Keyboard", price: 79, stock: 156 },
  { product: "Mouse", price: 49, stock: 89 },
  { product: "Monitor", price: 449, stock: 12 }
];
console.table(inventory);
// Displays a formatted table in the Console
 
// console.time() measures how long code takes to run
console.time("Array sort");
const bigArray = Array.from({ length: 1000000 }, () => Math.random());
bigArray.sort((a, b) => a - b);
console.timeEnd("Array sort");
// Output: Array sort: 245.6ms (varies by machine)
 
// console.group() organizes related logs
console.group("User Authentication");
console.log("Checking credentials...");
console.log("Token valid: true");
console.log("User role: admin");
console.groupEnd();

Console Shortcuts and Special Variables

Chrome DevTools provides special variables and shortcuts that only work in the Console, not in regular JavaScript files.

javascriptjavascript
// $0 refers to the currently selected element in the Elements panel
// Select an element in Elements, then in Console:
$0
// Returns the selected DOM element
 
$0.style.border = "2px solid red";
// Highlights the selected element with a red border
 
// $() is a shortcut for document.querySelector()
$("h1")
// Same as document.querySelector("h1")
 
// $$() is a shortcut for document.querySelectorAll() (returns array, not NodeList)
$$("p").length
// Returns the number of <p> elements on the page
 
// $_ refers to the result of the last evaluated expression
2 + 2
// 4
$_ * 10
// 40
 
// copy() copies any value to the clipboard
copy(JSON.stringify(inventory, null, 2));
// The JSON string is now in your clipboard

The Sources Panel: Debugging with Breakpoints

While the Console is great for running snippets, the Sources panel is where real debugging happens. You can set breakpoints, step through code line by line, and inspect the values of every variable at each step.

Setting a Breakpoint

javascriptjavascript
// Imagine you have this code in your project (app.js):
function processPayment(cart) {
  const subtotal = cart.reduce((sum, item) => sum + item.price * item.qty, 0);
  const tax = subtotal * 0.08;
  const shipping = subtotal > 100 ? 0 : 9.99;
  const total = subtotal + tax + shipping;
 
  return {
    subtotal: subtotal.toFixed(2),
    tax: tax.toFixed(2),
    shipping: shipping.toFixed(2),
    total: total.toFixed(2)
  };
}

To debug this function:

  1. Open DevTools and go to the Sources panel
  2. Find app.js in the file tree on the left
  3. Click on the line number next to const tax = subtotal * 0.08;
  4. A blue marker appears, indicating a breakpoint is set
  5. Trigger the function (click the checkout button, reload the page, etc.)
  6. Execution pauses at that line

When paused, you can:

  • Hover over any variable to see its current value
  • Check the Scope section in the right panel for all local and global variables
  • Use the Call Stack section to see which functions called the current function

Stepping Through Code

Once paused at a breakpoint, use these controls:

ButtonActionShortcutWhat It Does
▶ ResumeContinue executionF8Runs until the next breakpoint
⤴ Step OverNext lineF10Executes the current line and moves to the next
⤵ Step IntoEnter functionF11If the line calls a function, jumps inside it
⤴ Step OutExit functionShift+F11Finishes the current function and returns to the caller

The debugger Statement

You can also trigger a breakpoint directly from your code using the debugger keyword:

javascriptjavascript
function validateEmail(email) {
  debugger; // Execution pauses here when DevTools is open
  const regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  const isValid = regex.test(email);
  return isValid;
}
 
// When DevTools is open and this function runs,
// execution pauses at the debugger line
validateEmail("user@example.com");
Remove debugger Before Deploying

The debugger statement pauses execution only when DevTools is open. In production, it has no effect, but it is still bad practice to ship it. Most linters (ESLint) flag debugger statements as errors by default.

Live Editing in the Sources Panel

DevTools lets you edit JavaScript files directly and see changes without reloading the page. This is incredibly useful for testing quick fixes.

  1. Open the Sources panel
  2. Find your JavaScript file
  3. Click inside the code to edit it
  4. Press Ctrl+S (Windows) / Cmd+S (Mac) to save
  5. The changes take effect immediately for subsequent function calls
javascriptjavascript
// Original code in the Sources panel:
function getDiscount(total) {
  return total * 0.10; // 10% discount
}
 
// Edit it directly in DevTools to test a different discount:
function getDiscount(total) {
  return total * 0.25; // Changed to 25% for testing
}
// Press Ctrl+S, then call getDiscount(100) in the Console
// Output: 25 (instead of 10)

These edits are temporary. Reloading the page restores the original file. For persistent changes, edit your actual source files in your code editor.

Best Practices

Use console.table() for arrays and objects. It is far more readable than console.log() for structured data. One console.table(users) call replaces dozens of expanding disclosure triangles.

Set conditional breakpoints for targeted debugging. Right-click a line number in the Sources panel and select "Add conditional breakpoint." Enter an expression like cart.length > 5, and the breakpoint only triggers when that condition is true.

Use the Console as a scratch pad during debugging. When paused at a breakpoint, the Console has access to all variables in the current scope. You can test expressions, call functions, and inspect values without modifying your source code.

Learn keyboard shortcuts for stepping. F10 (step over), F11 (step into), and Shift+F11 (step out) are muscle memory for experienced developers. They are much faster than clicking the tiny buttons in the toolbar.

Use Snippets for reusable utility code. In the Sources panel, open the Snippets tab to save JavaScript code that persists across browser sessions. Useful for helper functions, data formatting scripts, or test data generators.

Common Mistakes and How to Avoid Them

Avoid These DevTools Pitfalls

These mistakes are common among developers who are new to browser developer tools.

Leaving console.log statements in production code. Excessive logging in production slows performance and exposes internal state to anyone who opens DevTools. Use a logging library with log levels (debug, info, error) and strip debug logs in your build process.

Editing code in DevTools and forgetting to update the source file. DevTools edits are temporary and reset on page reload. After testing a fix in DevTools, immediately replicate the change in your code editor and save the file.

Ignoring the call stack during debugging. When paused at a breakpoint, the call stack shows exactly how execution reached that point. Skipping this information means missing context about unexpected function calls or event handlers.

Relying on alert() for debugging. Using alert() blocks all execution and is disruptive. console.log() is non-blocking, and breakpoints are far more informative because they show the full state of your application.

Next Steps

[Start learning JavaScript](/tutorials/programming-languages/javascript/how-to-start-coding-in-javascript-for-beginners) variables

Now that you can run and debug code in Chrome, begin building real programs by learning how to declare and use JavaScript variables to store data.

Explore the Network panel

Learn how to use the Network panel to monitor API requests, check response times, and debug failed fetch calls. This is essential for working with any backend.

Practice with the Elements panel

Combine JavaScript and the Elements panel to inspect the DOM tree, live-edit HTML and CSS, and understand how your JavaScript changes affect the page structure.

Learn performance profiling

The Performance panel records a timeline of everything the browser does, including JavaScript execution, layout calculations, and painting. Use it to identify bottlenecks in your code.

Rune AI

Rune AI

Key Insights

  • Console as a REPL: The Console panel executes JavaScript instantly with access to the page's DOM and all loaded scripts
  • Beyond console.log: Use console.table(), console.time(), and [console.group](/tutorials/programming-languages/javascript/grouping-logs-together-with-console-group-js)() for structured, measurable debugging output
  • Breakpoints over logging: Setting breakpoints in the Sources panel reveals the full state of your application at any point in execution
  • Live editing for quick tests: Edit JavaScript directly in the Sources panel and press Ctrl+S to apply changes without reloading
  • debugger keyword: Adding debugger; to your code creates a programmatic breakpoint that activates when DevTools is open
RunePowered by Rune AI

Frequently Asked Questions

Can I run JavaScript in DevTools on any website?

Yes. DevTools runs JavaScript in the context of the currently loaded page. You can inspect, query, and modify any website's DOM and run any JavaScript code in its scope. This is how developers debug third-party sites and reverse-engineer page behavior.

Are changes made in DevTools permanent?

No. Any edits you make to JavaScript, HTML, or CSS in DevTools are temporary and reset when you reload the page. To make permanent changes, edit the original source files in your code editor. DevTools Workspaces can map to local files for persistence, but this requires explicit setup.

What is the difference between console.log and console.dir?

`console.log()` displays values with smart formatting (strings are printed as text, DOM elements show their HTML representation). `console.dir()` always displays the JavaScript object representation, showing all properties and methods. Use `console.dir()` when you want to see an element's properties rather than its HTML.

Can I use DevTools to debug Node.js applications?

Yes. Run your Node.js script with the `--inspect` flag (`node --inspect app.js`), then open `chrome://inspect` in Chrome. This connects DevTools to the Node.js process, giving you the same Sources panel, breakpoints, and variable inspection you get for browser JavaScript.

How do I clear the Console?

Click the clear button (circle with a line) in the top-left of the Console panel, or type `console.clear()`, or press `Ctrl+L` (Windows) / `Cmd+K` (Mac). You can also right-click inside the Console and select "Clear Console."

Conclusion

Chrome DevTools transforms your browser from a passive viewer into an active development environment. The Console panel lets you run and test JavaScript instantly, console.table() and console.time() provide structured insights into your data and performance, and the Sources panel with breakpoints gives you surgical precision when debugging complex logic. Learning these tools early in your JavaScript journey will make you a significantly faster and more effective developer.