DEV Community

JS Bits Bill
JS Bits Bill

Posted on β€’ Edited on

4 3

What's a JavaScript Statement Label?

While perusing a list of JavaScript statement and declaration types, I noticed one I hadn't seen before and that was a "label."

With a label you can namespace a statement:

myLabel: {
  console.log('To be');
  break myLabel;
  console.log('Or not to be');
}

console.log('That is the question πŸ’€');

/*
Logs:

  To be
  That is the question πŸ’€
*/
Enter fullscreen mode Exit fullscreen mode

We use a break to terminate the statement labeled myLabel and thus console.log('Or not to be'); does not run.

This code looks like we're creating an object with a key named myLabel and a value of another object but that is not it. As described in my earlier article, blocks are a set of zero or more statements grouped by curly braces. In our example, we've created a labeled block. Inside the block code we are breaking out of the same block referenced by its label.

Although they're not commonly used (in lieu of function calls), labels can be used with loops to either continue or jump out of the iteration:

const fruit = ['πŸ‡', '🍍', '🍎'];

myLoop:
for (let i = 0; i < 3; i++) {

  loopDaFruit:
  for (let j = 0; j < fruit.length; j++) {
    if (i === 1) break loopDaFruit;
    console.log(i, fruit[j]);
  }
}

/*
Logs:

  0 "πŸ‡"
  0 "🍍"
  0 "🍎"
  2 "πŸ‡"
  2 "🍍"
  2 "🍎"
*/
Enter fullscreen mode Exit fullscreen mode

Conversely, we can achieve the same result using the first loop's label with continue:

const fruit = ['πŸ‡', '🍍', '🍎'];

myLoop:
for (let i = 0; i < 3; i++) {

  loopDaFruit:
  for (let j = 0; j < fruit.length; j++) {
    if (i === 1) continue myLoop;
    console.log(i, fruit[j]);
  }
}

/*
Logs:

  0 "πŸ‡"
  0 "🍍"
  0 "🍎"
  2 "πŸ‡"
  2 "🍍"
  2 "🍎"
*/
Enter fullscreen mode Exit fullscreen mode

Seeing a labeled statement first the first time threw me off because it almost looked like some form of object literal syntax. Now it's clear what's really going on on, even though labeled statements are rare to see in the wild. 🦁


Check out more #JSBits at my blog, jsbits-yo.com. Or follow me on Twitter!

Speedy emails, satisfied customers

Postmark Image

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

πŸ‘‹ Kindness is contagious

Please leave a ❀️ or a friendly comment on this post if you found it helpful!

Okay