[英]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.