[英]Javascript key/value pair with no braces
我注意到在nodejs和浏览器中,你可以给出没有大括号的键/值对,并且它被接受。 它评估该对的一半值。 例如:
> { id: 5 }
{ id: 5 }
> id: 5
5
但如果你引用id
,那么节点需要更多输入:
> "id": 5
...
那么这里发生了什么? id: 5
是什么语法id: 5
没有括号时?
这不是一个错误。 您正在声明一个标签,后跟一个Number
文字。
控制台默认打印出代码中最后一个表达式的结果。
因此它打印5
。
您的困惑源于这样一个事实: 完全相同的语法可能意味着完全不同的东西,具体取决于上下文 。
这是JavaScript解析器根据规范的规则来决定的。
另一个例子是:
{}
这是一个对象文字还是块? 上下文提供了答案。
从规格 :
声明可以以标签为前缀。 带标签的语句仅与带标签的break和continue语句一起使用。 ECMAScript没有goto语句。 Statement可以是LabelledStatement的一部分,LabelledStatement本身可以是LabelledStatement的一部分,依此类推。 在描述各个语句的语义时,以这种方式引入的标签统称为“当前标签集”。
想象一下,你已经编写了一个嵌套的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
运行。
您可以使用标签扩充循环,以准确指定要继续的位置。
outer: for(var x = 0; x < 10; x++) {
for(var y = 0; y < 10; y++) {
if(thereIsAProblem) {
continue outer;
}
}
console.log('done a column');
}
虽然从技术上讲这是JavaScript中的一个标准功能,但是你不会经常看到它在野外使用,因为几乎总是有更惯用的方式来做事。
我认为这是JavaScript解析器的一个错误。 当您输入id : anything : 5
它会输出相同的结果(这也适用于Chrome)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.