在Node.js / JavaScript控制台中进行此评估的任何解释:
name
尝试分配给变量会引发错误:
> a:1
1
就像在JS控制台中仅保留> x = a:1
Thrown:
x = a:1
^
SyntaxError: Unexpected token :
一样:
a:
在Node.js REPL中:
a:
VM138:3 Uncaught SyntaxError: Unexpected token }(…)
答案 0 :(得分:5)
将a
的开头解析为语句的开头时,它被解释为 label (可以用来摆脱嵌套循环)。
outer:
for (let i = 0; i < 10; i++) {
console.log('outer loop iteration');
for (let j = 0; j < 10; j++) {
if (i === 3) {
break outer;
}
}
}
但是,不幸的是,即使标签未连接到循环,标签也是允许的,因此在标签上似乎什么也没做的事情不会引发语法错误。结果,这行
a:1
被解释为
a: // label named a
1 // unused expression
如果a
的开头不是语句开头的 not ,则不能将其解析为标签,因此冒号仅作为键值的一部分有意义对-因此,如果要解析的Javascript文本不是对象文字的一部分,则将引发语法错误,就像处理x = a:1
代码一样。
对于控制台,除非标签后面紧跟可能使用标签的代码,否则标签没有任何意义。如果您在控制台中键入代码,并且该代码在顶层包含一个标签,则只有在刚输入的代码运行时,才会定义该标签。因此,在此类代码中将标签定义为最后一行将导致该标签永远无法访问,这可能就是控制台抛出错误的原因(或者,在我的情况下,在Chrome 76上,它拒绝执行代码,而是给了我一个新行以继续输入。