[英]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;
有沒有人見過這個? 假設我無法重構所有相關代碼,這是最好的解決方法嗎?
如果你看一下規范,
- 如果 LeftHandSideExpression 既不是 ObjectLiteral 也不是 ArrayLiteral,則
一種。 令 lref 為評估 LeftHandSideExpression 的結果。 [...]
即編譯器/解釋器需要首先評估左側以驗證和確定右側表達式的類型。
我想不出比問題中提出的更好的解決方法。
PS 這與從右到左的規則並不矛盾。 RTL 意味着
x = y = 2;
被評估為
x = (y = 2);
代替
(x = y) = 2;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.