簡體   English   中英

Javascript 的評估順序有更好的解決方案嗎?

[英]Is there a better solution for Javascript's order of evaluation?

class foo {
  constructor(req) {
    this.req = req;
  }
  async bar() {
    this.req.baz = {};
    return 1;
  }
}
const req = {};
req.baz.boof = await new foo(req).bar();

我會認為 JS 會首先評估右側,而 req.baz 將是一個對象,然后再嘗試分配 req.baz.boof。 但是我收到一條錯誤消息,說無法分配 boof,因為 req.baz 未定義。 我知道代碼很糟糕,應該重構。 修復它的是這個:

const temp = await new foo(req).bar();
req.baz.boof = temp;

有沒有人見過這個? 假設我無法重構所有相關代碼,這是最好的解決方法嗎?

如果你看一下規范

  1. 如果 LeftHandSideExpression 既不是 ObjectLiteral 也不是 ArrayLiteral,則
    一種。 令 lref 為評估 LeftHandSideExpression 的結果。 [...]

即編譯器/解釋器需要首先評估左側以驗證和確定右側表達式的類型。

我想不出比問題中提出的更好的解決方法。

PS 這與從右到左的規則並不矛盾。 RTL 意味着

x = y = 2;

被評估為

x = (y = 2);

代替

(x = y) = 2;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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