我注意到在nodejs和浏览器中,你可以给出一个没有大括号的键/值对,并且它被接受了。它评估该对的一半值。例如:
> { id: 5 }
{ id: 5 }
> id: 5
5
但如果引用id
,则节点需要更多输入:
> "id": 5
...
那么这里发生了什么? id: 5
什么语法没有大括号?
答案 0 :(得分:5)
这不是错误。您正在声明一个标签,后跟Number
字面值。
控制台默认打印出代码中最后一个表达式的结果。
因此它会打印5
。
你的困惑源于这样一个事实:完全相同的语法可能意味着完全不同的东西,具体取决于上下文。
这是JavaScript解析器根据规范的规则决定的。
另一个例子是:
{}
这是一个对象文字还是一个块?上下文提供了答案。
来自the spec:
声明可能以标签为前缀。仅标记语句 与标记的break和continue语句一起使用。 ECMAScript没有goto语句。声明可以是a的一部分 LabelledStatement,它本身可以是LabelledStatement的一部分, 等等。这种方式引入的标签统称为 作为描述个人语义的“当前标签集” 语句。
答案 1 :(得分:1)
想象一下,你已经写了一个嵌套的Moment{
_d:Invalid Date
_i:Invalid Date
_isAMomentObject:true
_isUTC:false
_isValid:false
_locale:Locale
_pf:Object
__proto__:Object
}
。
for..loop
您希望突破内部循环并开始外部循环的下一次迭代,但您不希望for(var x = 0; x < 10; x++) {
for(var y = 0; y < 10; y++) {
if(thereIsAProblem) {
break;
}
}
console.log('done a column');
}
运行。
您可以使用标签扩充循环,以准确指定要继续的位置。
console.log
虽然从技术上讲这是JavaScript中的一个标准功能,但你不会经常看到它在野外使用,因为几乎总是有更惯用的方式来做事。
答案 2 :(得分:-1)
我认为这是JavaScript解析器的一个错误。当您输入id : anything : 5
时,它会输出相同的结果(这也适用于Chrome)。