除了 https://www.nodeloc.com/d/26813/ 我提到的示范用法外,这个标签语法还可以和 break 或 continue 跳转到指定标签位置

// 标签语法:可以用 break 或 continue 跳转到指定标签位置
loop1: // 定义一个标签
for (let i = 0; i < 3; i++) {
  loop2:
  for (let j = 0; j < 3; j++) {
    if (i === 1 && j === 1) {
      break loop1; // 直接跳出外层循环
    }
    console.log(i, j);
  }
}

运行会依次输出 0 0, 0 1, 0 2, 1 0


其他冷知识awa

  1. with 语句
    最开始我接触这个还是 VB6, 后面深入研究发现 JavaScript 也有

    const obj = { a: 1, b: 2 };
    with (obj) {
      console.log(a + b); // 3(直接访问 obj 的属性)
    }

    不过要注意的是这个在js已弃用,而且可能导致性能问题和歧义

  2. 位运算符(~
    如果对一个数字前面加上2个~,那么就相当于取整,虽然方便,但是不建议这么用

    console.log(~~3.14); // 输出 3
  3. 自定义模版字符串
    这个基本上没人知道吧(

    function love(strings, ...values) {
      return strings.reduce((acc, str, i) => 
        acc + str + (values[i] ? `<love>${values[i]}</love>` : ''), ''
      );
    }
    const name = "4n0n4me";
    console.log(love`Hello ${name}!`);

    会输出 Hello, <love>4n0n4me</love>!

  4. **(不让骂人)ASI
    猜测这个函数输出是什么

    function test() {
      return
      {
        key: "value"
      };
    }

    undefined ~ ,因为 ASI 会在 return 后面补全 ;