簡體   English   中英

沒有大括號的Javascript鍵/值對

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM